Python Flask Blueprint 向全局所有上下文注入变量值?

问题描述

我有以下 app.py:

def create_app(env_name) -> Flask:
    app = Flask(__name__)
    app.register_blueprint(foo1,url_prefix="/foo1")
    app.register_blueprint(foo2,url_prefix="/foo2")
    app.register_blueprint(foo3,url_prefix="/foo3")
    return app

以及以下 main.py:

from .app import create_app
app = create_app(env_name)
app.run(HOST,PORT)

在各个蓝图/控制器/上下文中,我定义了一个应用程序模板所需的函数

foo1app = Blueprint("foo1",__name__)
@foo1app.context_processor
def inject_Now():
    return {'Now': datetime.utcNow()}

目前我将上面的代码片段复制粘贴到所有蓝图/控制器/上下文。有没有办法在没有此代码重复的情况下全局注入 Now?谢谢。

解决方法

foo1app = Blueprint("foo1",__name__)
@foo1app.app_context_processor
def inject_now():
    return {'now': datetime.utcnow()}

来自 Blueprint 类:

  • context_processor:类似于Flask.context_processor,但用于蓝图。此函数仅对蓝图处理的请求执行。

  • app_context_processor:类似于Flask.context_processor,但用于蓝图。每次请求都会执行这样的函数,即使在蓝图之外。