我有一系列正在使用的蓝图,我希望能够将它们进一步捆绑到一个包中,以便尽可能无缝地与任何数量的其他应用程序一起使用。为应用程序提供整个引擎的一组蓝图。我在某种程度上创建了自己的解决方案,但它是手动的,需要太多的努力才能有效。它看起来不像是一个扩展,而且它是不止一个蓝图(几个提供公共功能的蓝图)。
完成了吗?多么?
(将多个程序捆绑在一起的应用程序调度方法可能不是我想要的)
发布于 2014-06-14 10:40:45
我希望Blueprint对象像Flask对象一样有一个register_blueprint函数。它会自动在当前蓝图的url下放置和注册蓝图。
发布于 2012-09-22 11:06:53
最简单的方法是创建一个函数,该函数获取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发布于 2021-06-02 00:26:12
查看以下内容:Nesting https://flask.palletsprojects.com/en/2.0.x/blueprints/#nesting-blueprints→
parent = Blueprint('parent', __name__, url_prefix='/parent')
child = Blueprint('child', __name__, url_prefix='/child')
parent.register_blueprint(child)
app.register_blueprint(parent)https://stackoverflow.com/questions/12533745
复制相似问题