首页 > flask中url_for()的问题

flask中url_for()的问题

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 搜一搜,往往能更快把它解决哦。

【热门文章】
【热门文章】