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()的参数的路由。

10-08 06:40