从蓝图中更改jinja_env
我正在尝试在我的蓝图中使用 Blueprint
对象注册一个新的 jinja 全局变量。但是,似乎 Blueprint
对象没有 jinja_env
属性;我该如何注册一个新的 jinja 全局属性呢?
这是蓝图的 __init__.py
文件,这个方法不行:
from flask import Blueprint, current_app
uploader = Blueprint('uploader', __name__, template_folder='templates')
from . import views
from . import models
current_app.jinja_env.globals['form_token'] = views.generate_form_token
这个方法也不行:
uploader.jinja_env.globals['form_token'] = views.generate_form_token
2 个回答
0
我在使用Flask和Jinja 2时遇到了类似的问题,主要是注册全局模板时,使用app_template_global装饰器遇到了麻烦。
我使用了add_app_template_global装饰器,具体可以参考这里的Flask API文档。
下面的代码适用于Flask(0.10.1)蓝图和Jinja2(2.8)。这是__init__.py
文件的内容。
from flask import Blueprint
blueprint_name = Blueprint('blueprint_name', __name__)
from . import views
在主文件中给函数添加装饰器[在我的情况下是views.py
]。这是views.py
文件的内容。
from . import blueprint_name
@blueprint_name.add_app_template_global
def function_name():
pass
然后你可以在Jinja2模板中这样调用这个函数:
<h1>
{{ function_name() }}
<h1>
5
使用 Blueprint.app_template_global
装饰器可以把一个全局函数注册到 jinja 环境中。
uploader.app_template_global(views.generate_form_token)
或者在 views.py 文件中:
@uploader.app_template_global
def generate_form_token():
pass