【发布时间】:2016-06-23 11:30:34
【问题描述】:
我正在尝试为如下所示的 get 请求创建复杂的路由:
@app.route('/get-details?id=<int:id>&code=<int:code>', methods=['GET'])
@login_required
def get_details(id, code):
# Do something with code and id ....
在我的模板中,我有一个如下所示的表单:
<form action="{{url_for('get_details')}}" method="get">
{{ form.hidden_tag() }}
{{ form.id() }}
{{ form.code() }}
<input type="submit">
</form>
但是当我尝试渲染我的页面时,我得到了这个异常:
File "/home/sharon/dev/wiseart/credixdealer/app/templates/dashboard/form-device.html", line 113, in block "content"
<form action="{{url_for('get_details')}}" method="get">
File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 332, in url_for
return appctx.app.handle_url_build_error(error, endpoint, values)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1811, in handle_url_build_error
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/helpers.py", line 322, in url_for
force_external=external)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/routing.py", line 1758, in build
raise BuildError(endpoint, values, method, self)
BuildError: Could not build url for endpoint 'get_details'. Did you forget to specify values ['business_id', 'id']?
如何在 url_for 中指定应从表单本身检索参数?
【问题讨论】:
-
'/get-details?id=
&code= '... 你为什么要制造复杂性。这可以通过非常简单的方式完成。 -
Werkzeug 路由底层
app.route()在文档中确实提到了query_args,但也有这样的说法:“query_args – 用于自动重定向的可选查询参数作为字符串或字典。目前不是可以使用查询参数进行 URL 匹配。”我认为此时您在 Flask 中尝试做的事情是不可能的。你试过Pyramid吗? -
但抛开话题,你应该access query params using
request.args。 -
谢谢!似乎使用 request.args 访问可以解决问题
标签: python templates flask jinja2