【问题标题】:Why does this query returns empty?为什么这个查询返回空?
【发布时间】:2016-02-18 12:57:28
【问题描述】:

我有一个使用 py2neo 显示组的烧瓶应用程序。我试图让 URL 更漂亮,所以我找到了这两篇文章:一篇关于 how to generate slugs,另一篇关于 how to create custom converters。我结合这些文章制作了以下代码:

# app/views.py

from flask import Flask, redirect, render_template, url_for
from models import graph, Group

app = Flask(__name__)

from .util import SlugConverter
app.url_map.converters['slug'] = SlugConverter

...

@app.route('/group/<slug:group_name>')
def show_group(group_name):

    query = """
    MATCH (group:Group)
    WHERE group.slug = {group_name}
    RETURN group
    """
    group = graph.cypher.execute_one(query, group_name = group_name)
    if group:
        return render_template('group.html', group = group)
    else:
        return redirect(url_for('show_groups'))

.

# app/util.py

from werkzeug.routing import BaseConverter
import re
import translitcodec

class SlugConverter(BaseConverter):

    def to_python(self, value):
        pass

    def to_url(self, value):
        exp = r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+'
        punct_re = re.compile(exp)
        delim = u'_'
        result = []
        for word in punct_re.split(value.lower()):
            word = word.encode('translit/long')
            if word:
                result.append(word)
        return unicode(delim.join(result))

创建 slug 和替换 url 没有问题。我遇到的问题是,如果我通过graph.cypher.execute_one() 传递query,它会返回None。我不明白为什么。如果我在 NEO4J Web 查看器中使用相同的查询,仅替换 {group_name},例如 "north_carolina",它会返回相关节点。

为什么这个查询返回空?

【问题讨论】:

  • 你试过用pdb(或print)查看show_group第一行的group_name是否为空吗?
  • @Oin 它似乎是空的。我刷了那个变量,结果是None

标签: python flask neo4j py2neo


【解决方案1】:

SlugConverter.to_python 方法必须返回您要在视图中使用的实际值。您也许可以将您的 to_url 值改为 to_python。让to_urlreturn value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多