【问题标题】:URL building with Flask and non-unique handler names使用 Flask 和非唯一处理程序名称构建 URL
【发布时间】:2011-08-05 13:51:52
【问题描述】:

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

【问题讨论】:

    标签: python url url-routing wsgi flask


    【解决方案1】:

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

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

    这是一个例子:

    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 个索引视图并仍然区分另一个,只需使用 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 上提供

    【讨论】:

    • +1 以获得出色的答案(现在,我只需要找到 +2 按钮)。
    • 感谢您的出色回答,这对我很有帮助。我不确定它是否改变了,但它似乎是“url_prefix”而不仅仅是“prefix”。
    • 蓝图的简单示例。这对我的项目非常有效。为你点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多