Flask url_for如何运作?

时间:2014-08-06 12:13:56

标签: python flask

flask.url_for(endpoint, **values)

endpoint对我来说似乎很神奇。它的行为方式如下:

  1. 在单个文件中,dothat
  2. 可以获取装饰方法url_for('dothat')
  3. views.dothaturl_for('dothat')可以url_for('myapp.views.dothat')获取,我希望我必须提供完全限定方法名称,如{{1}} 1}}
  4. 因此,如果它不是完全限定的方法名称,那么Flask作为端点接受什么?

1 个答案:

答案 0 :(得分:1)

Flask 使用端点的模块名称。它只是默认为函数名。

如果您注册两个具有相同名称的不同功能(例如,在两个不同的模块中),则会引发AssertionError异常:

raise AssertionError('View function mapping is overwriting an '
                     'existing endpoint function: %s' % endpoint)

您可以在这种情况下指定显式端点名称:

@app.route('/', endpoint='alt_homepage')
def homepage():
    pass

请参阅@Flask.route() documentation

  

端点 - 已注册网址规则的端点。 Flask本身将视图函数的名称视为端点

当您注册视图(使用@app.route()装饰器)时,将确定端点名称(除非您明确设置一个)并与路径注册一起存储。 url_for()使用路由注册来查找根据该名称注册的所有路由,并找到最适合您传递给url_for()的参数的路由。