gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:06:18 25 4
gpt4 key购买 nike

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

示例

模块 A 有一个处理程序 index:

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

并且模块 B 有另一个处理程序 index:

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

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

url_for('index')

最佳答案

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

我通常做的是将不同模块中的 View 分开(就像您对模块 AB 所做的那样),然后将它们注册为蓝图,然后在使用时url_for() 函数,您可以在 View 名称前加上您的蓝图名称,然后避免冲突和潜在问题。

这是一个例子:

ma​​in_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 个索引 View 并仍然区分另一个,只需使用 url_for('main.index')url_for('admin.index')

编辑:

还有一个关于使用蓝图进行路由的有用细节,在注册蓝图时,您可以传递一个 url_prefix 参数,该参数将应用于此蓝图中的每个 View 。

例如,给定以下代码:

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')

这两个 View 将在 URL /admin//admin/logout

上可用

关于python - 使用 Flask 和非唯一处理程序名称构建 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6957396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com