Flask提供了url_for
功能,可根据网址格式为处理程序生成网址。但这意味着处理程序函数必须在整个应用程序中具有唯一的名称。这是对的吗?
示例
模块A有一个处理程序index
:
@app.route('/')
def index(): pass
模块B有另一个处理程序index
:
@app.route('/anotherindex')
def index(): pass
如何在构建网址时区分名为index
的处理程序?
url_for('index')
答案 0 :(得分:50)
我不知道如何处理同一模块路由的所有视图。
我通常做的是在不同模块中分隔我的观点(就像你对模块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_prefix
参数,该参数将应用于此蓝图中的每个视图。
例如,给出以下代码:
<强> admin_views.py 强>
from flask import Blueprint
admin = Blueprint('admin', __name__)
@admin.route('/')
def index():
pass
@admin.route('/logout')
def logout():
pass
<强> application.py:强>
from flask import Flask
from admin_views import admin
app = Flask('my_application')
app.register_blueprint(admin, url_prefix='/admin')
可在网址/admin/
和/admin/logout