烧瓶mongoengine搜索

时间:2014-03-17 22:03:54

标签: flask mongoengine

搜索/修补无效。

我正在使用烧瓶,mongoengine,mongodb 2.4版。

我正在尝试查询我的一个集合(帖子,特别是通过标签)。

这些是我的路线:

@notes_app.route('/search', methods= ["post"])
@login_required
def search():
    query = request.form.get('query')
    return redirect(url_for('search_results', query=query)

@notes_app.route('/search_results/<query>', methods=["post"])
@login_required
def search_results(query):
    posts = models.Post.objects(tag=query)
    return render_template('search_results.html', posts=posts)

这是index.html中的搜索框

<form action='/search' method="post">
        <p><input type="text" name="query" value="test"></p>
        <p><input type="submit" value="Search"></p>
        <br />
      </form>

我的追溯:

File "notes.py", line 75, in search
   return redirect(url_for('search_results', query=query))
File "python2.7/site-packages/flask/helpers.py", line 312, in url_for
   return appctx.app.handle_url_build_error(error, endpoint, values)
File "python2.7/site-packages/werkzeug/routing.py", line 1620, in build
   raise BuildError(endpoint, values, method)
   BuildError: ('search_results', {'query': u'coding'}, None)

非常感谢任何建议,谢谢!

2 个答案:

答案 0 :(得分:1)

在蓝图中重定向时,您需要在调用url_for时包含蓝图名称。

如果使用定义为

的蓝图
notes_app = Blueprint('notes_app', __name__, template_folder='templates')

你需要使用

@notes_app.route('/search', methods=['POST'])
@login_required
def search():
    query = request.form.get('query')
    return redirect(url_for('notes_app.search_results', query=query)

答案 1 :(得分:0)

我很确定'methods'参数区分大小写。我有一个类似的应用程序,我的代码有全部大写方法= ['GET','POST'],烧瓶文档也是如此。这可以解释为什么你的回溯在BuildError中显示'None'。

此外,您的查询变量看起来像是显示整个键值对;如果这是你的应用程序逻辑的一部分,那很好,但我的如下:

query = request.args.get('query')

因此,在我的例子中,查询变量只是字符串值,而不是整个键值对。 (同样,你的应用程序逻辑可能会有不同的设置。)另外,如果你想使用'request',你需要从flask中导入它。