【问题标题】:Flask mongoengine search烧瓶 mongoengine 搜索
【发布时间】:2014-03-19 04:50:53
【问题描述】:

四处搜索/修补无济于事。

我使用的是flask,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)

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

【问题讨论】:

  • notes_appFlaskBlueprint 的实例吗?
  • @dim 蓝图,非常类似于link

标签: flask mongoengine


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

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

    所以,在我的例子中,查询变量只是字符串值,而不是整个键值对。 (同样,您的应用程序逻辑可能设置不同。)另外,如果您想使用“请求”,则需要从烧瓶中导入它。

    【讨论】:

    • 尝试了这两个建议。没有修复,当我更改:query = request.form.get('query') 到 query = request.args.get('query') 我收到错误:BuildError: ('search_results', {}, None)。
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多