Rob*_*Rob 18 python build-error werkzeug url-for flask
在类似问题的互联网上找到一两个人,但没有看到任何地方发布的解决方案.我从下面的代码/模板中得到了构建错误,但无法确定问题的位置或原因.似乎模板没有识别该功能,但不知道为什么会发生这种情况.任何帮助将不胜感激 - 现在已经敲了两下我的键盘.
功能:
@app.route('/viewproj/<proj>', methods=['GET','POST'])
def viewproj(proj):
Run Code Online (Sandbox Code Playgroud)
...
模板摘录:
{% for project in projects %}
<li>
<a href="{{ url_for('viewproj', proj=project.project_name) }}">
{{project.project_name}}</a></li>
{% else %}
No projects
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
错误日志:https: //gist.github.com/1684250
编辑:还想包括它在构建URL时没有识别变量"proj",所以它只是将值附加为参数.这是一个例子:// myproject/viewproj?projname = what + up
最后几行:
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/layout.html", line 103, in top-level template code, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] {% block body %}{% endblock %}, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/main.html", line 34, in block "body", referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] <a href="{{ url_for('viewproj', proj=project.project_name) }}">, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/usr/lib/python2.7/dist-packages/flask/helpers.py", line 195, in url_for, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] return ctx.url_adapter.build(endpoint, values, force_external=external), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/usr/lib/pymodules/python2.7/werkzeug/routing.py", line 1409, in build, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] raise BuildError(endpoint, values, method), referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] BuildError: ('viewproj', {'proj': '12th'}, None), referer: xx://myproject.com/
Run Code Online (Sandbox Code Playgroud)
atu*_*pal 25
url_for查找一个函数,你传递它想要调用的函数的名称.所以你应该使用:
{{ url_for('viewproj', proj=xxx) }}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题.我解决了它:Flask错误:werkzeug.routing.BuildError
Art*_*ang 20
刚刚解决了同样的问题,解决方案真的很有趣.
只需添加'.' 在url_for中的方法名称前面.
像这样:
<a href="{{ url_for('.viewproj', proj=project.project_name) }}">
Run Code Online (Sandbox Code Playgroud)
它现在应该工作了.
Flask的这个解决方案的文档是http://flask.pocoo.org/docs/0.10/api/,我引述:
flask.url_for(endpoint,**values)使用提供的方法生成指向给定端点的URL.
目标端点未知的变量参数作为查询参数附加到生成的URL.如果查询参数的值为None,则跳过整个对.如果蓝图处于活动状态,您可以通过在本地端点前加一个点(.)来快捷方式对同一蓝图的引用.
这将引用当前蓝图的本地索引函数:
url_for('.index')
Run Code Online (Sandbox Code Playgroud)
小智 -3
当您指定该端点上可用的方法时,我认为您必须将所需的方法传递到 url_for 中。
url_for('viewproj', proj=project.project_name, method='GET')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49713 次 |
| 最近记录: |