在模板中访问jinja2全局变量

Joe*_*ndo 0 python jinja2 flask

我有一个正在开发的Flask应用程序,在从模板中访问jinja2全局变量时遇到问题,关于我在这里做错什么的任何想法吗?

__init__.py

from config import *

...

#Initialize Flask App
app = Flask(__name__)

#Jinja2 global variables
jinja_environ = app.create_jinja_environment()
jinja_environ.globals['DANISH_LOGO_FILE'] = DANISH_LOGO_FILE
jinja_environ.globals['TEMPLATE_MEDIA_FOLDER'] = TEMPLATE_MEDIA_FOLDER

...
Run Code Online (Sandbox Code Playgroud)

config.py

...

TEMPLATE_MEDIA_FOLDER = '../static/img/media_library/' #This is the location of the media_library relative to the templates directory
DANISH_LOGO_FILE = '100danish_logo.png'

...
Run Code Online (Sandbox Code Playgroud)

示例模板

<p>{{ TEMPLATE_MEDIA_FOLDER }}</p>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,TEMPLATE_MEDIA_FOLDER不会在模板上打印任何内容。

Jar*_*red 5

我假设您在render_template这里使用Flask的函数,默认情况下该函数链接到应用程序的jinja_env属性。

所以尝试这样的事情,

app = Flask(__name__)
app.jinja_env.globals['DANISH_LOGO_FILE'] = DANISH_LOGO_FILE
app.jinja_env.globals['TEMPLATE_MEDIA_FOLDER'] = TEMPLATE_MEDIA_FOLDER
Run Code Online (Sandbox Code Playgroud)


Sam*_*lam 5

接受的答案有效,但它给了我 pylint 错误

[pylint] E1101:Method 'jinja_env' has no 'globals' member
Run Code Online (Sandbox Code Playgroud)

这样做可以避免错误:

app = Flask(__name__)
app.add_template_global(name='DANISH_LOGO_FILE', f=DANISH_LOGO_FILE)
Run Code Online (Sandbox Code Playgroud)