You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask嵌套蓝图:如何为各层级配置动态URL变量前缀

Flask嵌套蓝图中添加动态URL标识符的方法

当你在Flask中按如下结构嵌套蓝图时:

a_bp = Blueprint('a', __name__)
b_bp = Blueprint('b', __name__)
c_bp = Blueprint('c', __name__)

b_bp.register_blueprint(c_bp, url_prefix="/c")
a_bp.register_blueprint(b_bp, url_prefix="/b")
app.register_blueprint(a_bp, url_prefix="/a")

若要为每个嵌套层级添加<int:variableName>格式的动态URL标识符,最终生成类似/a/<int:a_id>/b/<int:b_id>/c/的路径,可以通过为每个动态参数层级添加中间蓝图的方式实现,具体代码如下:

from flask import Flask, Blueprint

app = Flask(__name__)

a_bp = Blueprint('a', __name__)
# 为a层级的动态参数创建中间蓝图,避免名称重复
a_dynamic_bp = Blueprint('a_dynamic', __name__)
b_bp = Blueprint('b', __name__)
# 为b层级的动态参数创建中间蓝图
b_dynamic_bp = Blueprint('b_dynamic', __name__)
c_bp = Blueprint('c', __name__)

# 从最内层向外层注册蓝图,保证URL前缀拼接顺序正确
b_dynamic_bp.register_blueprint(c_bp, url_prefix="/c")
b_bp.register_blueprint(b_dynamic_bp, url_prefix="/<int:b_id>")
a_dynamic_bp.register_blueprint(b_bp, url_prefix="/b")
a_bp.register_blueprint(a_dynamic_bp, url_prefix="/<int:a_id>")
app.register_blueprint(a_bp, url_prefix="/a")

# 测试视图:直接接收所有层级的动态参数
@c_bp.route('/')
def c_view(a_id, b_id):
    return f"捕获到的参数:a_id={a_id}, b_id={b_id}"

if __name__ == '__main__':
    app.run(debug=True)

关键说明:

  • 每个动态参数层级需要独立的中间蓝图,用来承载url_prefix="/<int:xxx>"规则,避免破坏原有核心蓝图的结构。
  • 蓝图必须从最内层(c_bp)向外层(app)依次注册,确保URL前缀按预期拼接。
  • 内层视图函数可以直接接收所有外层的动态参数,Flask会自动从URL中解析并传递这些参数。

内容的提问来源于stack exchange,提问作者kando

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:06:05