最简单的方法是创建一个函数,该函数接受Flask 应用程序的实例,并一次性在其上注册所有蓝图。像这样的:
# sub_site/__init__.py
from .sub_page1 import bp as sb1bp
from .sub_page2 import bp as sb2bp
# ... etc. ...
def register_sub_site(app, url_prefix="/sub-site"):
app.register_blueprint(sb1bp, url_prefix=url_prefix)
app.register_blueprint(sb2bp, url_prefix=url_prefix)
# ... etc. ...
# sub_site/sub_page1.py
from flask import Blueprint
bp = Blueprint("sub_page1", __name__)
@bp.route("/")
def sub_page1_index():
pass
或者,您可以使用类似HipPocket 的autoload function(完全披露:我写了HipPocket)来简化导入处理:
# sub_site/__init__.py
from hip_pocket.tasks import autoload
def register_sub_site(app,
url_prefix="/sub-site",
base_import_name="sub_site"):
autoload(app, base_import_name, blueprint_name="bp")
但是,就目前而言,您不能使用与示例 #1 相同的结构(HipPocket 假设您正在为每个蓝图使用包)。相反,您的布局将如下所示:
# sub_site/sub_page1/__init__.py
# This space intentionally left blank
# sub_site/sub_page1/routes.py
from flask import Blueprint
bp = Blueprint("sub_page1", __name__)
@bp.route("/")
def sub_page1_index():
pass