搜索/修补无效。
我正在使用烧瓶,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)
非常感谢任何建议,谢谢!
答案 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中导入它。