小编典典

使用Flask和非唯一处理程序名称构建URL

python

Flask提供了url_for根据URL模式为处理程序生成URL的功能。但这意味着处理程序函数在整个应用程序中必须具有唯一的名称。那是对的吗?

模块A有一个处理程序index

@app.route('/')
def index(): pass

模块B还有另一个处理程序index

@app.route('/anotherindex')
def index(): pass

如何区分index在构建URL时调用的处理程序?

url_for('index')

阅读 159

收藏
2021-01-20

共1个答案

小编典典

我不知道如何处理同一模块路由的所有视图。

我通常要做的是将视图分开放在不同的模块中(就像您对moduleA和进行的操作一样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')

2个视图将在URL/admin//admin/logout

2021-01-20