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
相关产品推荐
相关产品推荐

