Python 当使用带烧瓶的应用程序工厂时,如何在“应用程序”上放置装饰器?

Python 当使用带烧瓶的应用程序工厂时,如何在“应用程序”上放置装饰器?,python,flask,python-decorators,Python,Flask,Python Decorators,我正在尝试为我的应用程序定义一些全局常量,并发现这可以通过修饰为@app.context\u processor的函数来完成 但是,问题是我没有app变量。我的应用程序使用应用程序工厂,我希望保持这种方式。是否有其他方法将函数注册为我的应用程序的上下文处理器 我看到的一个选项是将decorator应用于每个Blueprint,而不是应用于应用程序。这是我想要避免的,因为它会导致大量重复的代码。问题是,对于工厂来说,没有app对象。您有一个create\u app函数,可以在其中创建应用程序 因此

我正在尝试为我的应用程序定义一些全局常量,并发现这可以通过修饰为
@app.context\u processor
的函数来完成

但是,问题是我没有
app
变量。我的应用程序使用应用程序工厂,我希望保持这种方式。是否有其他方法将函数注册为我的应用程序的
上下文处理器


我看到的一个选项是将decorator应用于每个
Blueprint
,而不是应用于应用程序。这是我想要避免的,因为它会导致大量重复的代码。

问题是,对于工厂来说,没有
app
对象。您有一个
create\u app
函数,可以在其中创建应用程序

因此,要安装上下文处理器,您可以使用
create\u app
本身

def创建应用程序(配置文件名):
app=烧瓶(名称)
app.config.from_pyfile(config_文件名)
从yourapplication.model导入数据库
db.init_应用程序(应用程序)
从yourapplication.context\u处理器导入myprocessor
应用程序上下文处理器(myprocessor)
从您的application.views.frontend导入前端
应用程序注册蓝图(前端)
返回应用程序
您还可以在同一app.py文件中使用该函数(无论编写create_app()函数的位置)。在这种情况下,您可以只注册上下文处理器而不导入它

另一种方法是在蓝图中完成,如下所示

从flask导入蓝图
thingy=Blueprint(“thingy”、\uuuuuu名称、模板\uu文件夹='templates')
@东西路线(“/”)
def index():
返回render_模板(“thingy_test.html”)
@上下文处理器
def实用程序_处理器():
def格式_价格(金额、货币=u'$):
返回u'{1}{0:.2f}'。格式(金额、货币)
返回指令(格式价格=格式价格)

Thank@IMCoins可能重复,但这是我遇到的一个问题。答案解释了如何装饰每个单独的蓝图,这会给我带来大量冗余代码。那么你使用的是蓝图?另外,您只想使用装饰器,还是可以稍后通过代码注册装饰器?添加您尝试过的代码?谢谢!我假设第一个代码示例中的
myprocessor
是一个不带参数的函数,与第二个示例中的函数类似,对吗?@leeweight,是的,基本上是您在其他文件中编写的处理器函数,没有装饰器,只是尝试了一下,它工作得很好。非常感谢!