flask.url_for(endpoint, **values)
在我看来,
endpoint
东西似乎很神奇。它的行为方式如下:在单个文件中,可以通过
dothat
获取修饰的方法url_for('dothat')
与packaging一起使用时,当我希望必须提供完全限定的方法名称时,如
views.dothat
所示,url_for('dothat')
可以被url_for('myapp.views.dothat')
所获取。因此,如果不是完全限定的方法名称,Flask将用作端点吗?
最佳答案
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:端点–已注册URL规则的端点。 Flask本身假定视图函数的名称为端点
当您注册一个视图(使用
@app.route()
装饰器)时,将确定端点名称(除非您明确设置了该名称),并将其与路由注册一起存储。 url_for()
使用路由注册来查找针对该名称注册的所有路由,并找到最适合您还传递给url_for()
的参数的路由。