我正在尝试为我的应用程序定义一些全局常量,并且发现可以用装饰为@app.context_processor
的函数来完成此操作。
但是,问题是我没有app
变量。我的应用程序使用一个应用程序工厂,我希望保持这种状态。是否有其他方法可以将功能注册为我的应用的context_processor
?
我看到的一个选择是将装饰器应用于每个Blueprint
,而不是将其应用于应用程序。不过,我还是要避免这种情况,因为这会导致很多重复的代码。
答案 0 :(得分:1)
问题是在工厂的情况下没有app
对象。您可以在其中创建应用的create_app
函数。
因此,要安装上下文处理器,您可以自己使用create_app
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
from yourapplication.model import db
db.init_app(app)
from yourapplication.context_processor import myprocessor
app.context_processor(myprocessor)
from yourapplication.views.frontend import frontend
app.register_blueprint(frontend)
return app
另一种方法是按照如下所示的蓝图进行操作
Flask context processors functions
from flask import Blueprint
thingy = Blueprint("thingy", __name__, template_folder='templates')
@thingy.route("/")
def index():
return render_template("thingy_test.html")
@thingy.context_processor
def utility_processor():
def format_price(amount, currency=u'$'):
return u'{1}{0:.2f}'.format(amount, currency)
return dict(format_price=format_price)