Flask 如何从blueprint模板中访问应用程序名称?

Flask 如何从blueprint模板中访问应用程序名称?,flask,Flask,我已经为一些独立的小应用程序编写了一个公共蓝图,作为python包。大多数情况下,这只是一个顶级模板和样式表,为应用程序提供统一的设计。我想在顶级模板中显示当前应用的名称,但我不知道如何显示。似乎无法从应用程序注册的蓝图中访问应用程序上下文 我试过这个: @blueprint.context_processor def appinfo(): return { 'appname': flask.current_app.name } 但它仅在模板由blueprint的一个视图函数呈现而不是

我已经为一些独立的小应用程序编写了一个公共蓝图,作为python包。大多数情况下,这只是一个顶级模板和样式表,为应用程序提供统一的设计。我想在顶级模板中显示当前应用的名称,但我不知道如何显示。似乎无法从应用程序注册的蓝图中访问应用程序上下文

我试过这个:

@blueprint.context_processor
def appinfo():
    return { 'appname': flask.current_app.name }
但它仅在模板由blueprint的一个视图函数呈现而不是从应用程序的视图函数呈现时才起作用。

使用表示该函数将仅对blueprint处理的请求进行调用。名称空间很棒

如果您希望“appname”在每个模板中都可用:app和blueprints一样,那么向
Flask.context\u processor
注册上下文处理器应该满足这一要求

app = Flask(__name__)

@app.context_processor
def appinfo():
    return dict(appname=app.name)

blueprint.app\u context\u processor()可以解决这个问题。

我知道我可以在每个应用程序中使用context\u处理器,但我希望在blueprint中只使用一次。好的,您需要找到一种在blueprint包中获取Flask实例的方法。可以在blueprint包中公开一个工厂函数,该函数接受Flask实例并在blueprint中使用它来定义上下文处理器。实际上,烧瓶实例有一个明确的依赖关系。您可以使用Blupprint.context\u处理器,它的作用域是blueprint或blueprint.app\u context\u处理器。然后,上下文在整个应用程序中可用