Flask提供了url_for根据URL模式为处理程序生成URL的功能。但这意味着处理程序函数在整个应用程序中必须具有唯一的名称。那是对的吗?
url_for
例
模块A有一个处理程序index:
index
@app.route('/') def index(): pass
模块B还有另一个处理程序index:
@app.route('/anotherindex') def index(): pass
如何区分index在构建URL时调用的处理程序?
url_for('index')
我不知道如何处理同一模块路由的所有视图。
我通常要做的是将视图分开放在不同的模块中(就像您对moduleA和进行的操作一样B),然后将它们注册为蓝图,此后,在使用该url_for()函数时,可以在视图名称前加上蓝图名称,以避免冲突和潜在的冲突。问题。
A
B
url_for()
这是一个例子:
main_views.py:
from flask import Blueprint main = Blueprint('main', __name__) @main.route('/') def index(): pass
admin_views.py:
from flask import Blueprint admin = Blueprint('admin', __name__) @admin.route('/admin') def index(): pass
application.py:
from flask import Flask from main_views import main from admin_views import admin app = Flask('my_application') app.register_blueprint(main) app.register_blueprint(admin)
现在,要访问2个索引视图并仍然可以将另一个视图分开,只需使用url_for('main.index')或url_for('admin.index')
url_for('main.index')
url_for('admin.index')
关于使用蓝图进行路由的一个有用的详细信息,在注册蓝图时,您可以传递一个url_prefix参数,该参数将应用于该蓝图中的每个视图。
url_prefix
例如,给出以下代码:
admin_views.py
from flask import Blueprint admin = Blueprint('admin', __name__) @admin.route('/') def index(): pass @admin.route('/logout') def logout(): pass
from flask import Flask from admin_views import admin app = Flask('my_application') app.register_blueprint(admin, url_prefix='/admin')
2个视图将在URL/admin/和/admin/logout
/admin/
/admin/logout