请教:Flask url_for 的 build error

2013-02-09 09:57:31 +08:00
 Hualin
请教:Flask url_for 的 build error
===
最近业余时间写一个 flask 的网站

我所有的 URL RULE 全部写在 `init_route.py` 里面了,其中有个一带参数的 url 规则是:

from subject import view_subject
app.add_url_rule('/all_subjects/<subject_id>', 'subject', view_subject, methods=['GET', 'POST'])
然后我在另一个 view 的响应函数中最后返回:

return redirect(url_for('view_subject', subject_id = str(subject_id)))

然后报错说: BuildError: ('view_subject', {'subject_id': '2'}, None)

但是注意,view_subject 这个 view 在之前的流程中是有正常显示过的,只是没有用 url_for 来调用。我不理解,这和我在 `init_route.py` 中以 `add_url_rule` 定义相应函数而不是用 decorator 修饰有关吗?可是,以我的理解,decorator 只能定义想用函数的正上方加上才可以,可是我的响应函数和 `init_route.py` 不在一个文件,也不该在一个文件。我记得之前在 jinja template 中也出现类似参数的 `url_for` 调用失败,最后我不得不手动拼接 URL。

flask 自己给的例子全是用 decorator,而 flask 关于 `url_for` 的官方文档也没有让我能明白的例子,

例如,如果我的 URL 有三个参数:
from form import display_block
app.add_url_rule('/all_subjects/<subject_id>/<block_name>/<mode>', 'block', display_block)

以上的 url 我在 jinja template 中是用手动拼接来相应的。

真郁闷

求大神帮帮 我感觉我可能有那个常识性的东西没搞
6155 次点击
所在节点    Python
3 条回复
Hualin
2013-02-09 10:00:20 +08:00
辞旧迎新,大家蛇年吉祥喽~~~~
yinian1992
2013-02-11 16:26:10 +08:00
你在 add_url_rule 里指定了 endpoint 为 'subject' 了。
所以你在 url_for 里也应该用 'subject'。

详情见:
http://docs.torriacg.org/docs/flask/api.html?highlight=add_url_rule#flask.Flask.add_url_rule
http://docs.torriacg.org/docs/flask/api.html?highlight=url_for#flask.url_for
Hualin
2013-02-11 19:31:44 +08:00
搞定啦

真的很感谢;大年初二真给力!
我把 endpoint 和 view_func 这两个概念给搞混了。
end_point 是 static 里面的 HTML 页

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/60135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX