url_for(endpoint)方法中传递一个endpoint,我知道这个endpoint写上定义视图的方法名就可以了,比如有:
@app.route('/')
def index:
pass
则可以写成url_for(index)
但我的项目中我是使用的MethodView来定义的视图,方法名就是get,如下:
class PostView(MethodView):
def get(self, oid=None):
pass
下面添加了url规则:
xx.add_url_rule('/post/<oid>/', view_func=PostView.as_view('post'))
象这种情况,我如何在template中使用url_for来生成url呢?
问题解决了,问题的关键是不同的view映射不同的url以及有不同的默认参数值,不容易在template里获取,我找到办法:
获取当前endopoint:
{{ request.endpoint }}
获取显式或隐式默认路由参数值:
{% set args=request.view_args.copy() %}
{{ args['参数名'] }}
url_for('post', _method='GET')
url_for('post', _method='other_method')
# 这里的 'post' 就是你调用 PostView.as_view() 时传进去的名字。
PS. url_for() 的 _method 参数是在 flask 0.9 时加上去的。在之前的版本中,url_for() 不支持 MethodView
参考链接: http://flask.pocoo.org/mailinglist/archive/2011/11/2/url-for-matching/
这里有 Flask 作者对这个问题的解答(就是 Armin Ronacher 给出的那条回复)
又一个PS. 在 Google 里搜"MethodView url_for()",第一条结果就是上面给出的链接。 所以,碰到问题多用 Google 搜一搜,往往能更快把它解决哦。