我正在构建一个Django应用程序并选择使用Jinja2作为我的模板引擎。我注意到在从Django内置的模板引擎切换到Jinja2后,load
关键字无效,例如:{% load static %}
。这用于加载CSS等静态文件。在Django中是否有针对此的Jinja解决方法?
/ app /的TemplateSyntaxError 遇到未知标记'加载'。
来自settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [
os.path.join(BASE_DIR, 'app/templates/jinja2'),
],
'APP_DIRS': True,
'OPTIONS': {
'environment': 'my_project.jinja2.environment',
},
},
Django:1.11
Jinja2:2.9.6
答案 0 :(得分:5)
django模板参考
中Jinja2的手册部分对此进行了解释有目的地将默认配置保持在最低限度。如果一个 模板是用请求呈现的(例如,当使用render()时) Jinja2后端将全局请求,csrf_input和csrf_token添加到 上下文。除此之外,这个后端不会创建一个 Django风味的环境。它不知道Django过滤器和 标签。要使用特定于Django的API,您必须配置它们 进入环境。
是的,{%load static%}不存在,但有一个简单的解决方法。同样,该示例来自参考
from __future__ import absolute_import # Python 2 only
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse,
})
return env
答案 1 :(得分:1)
实际上,这是Jinja2中的预期行为。这是因为Jinja2标签不是从模板页面加载的,而是在创建过程中将扩展添加到Jinja2 env中。当它开始运行(并且创建了env)时,您无法添加更多扩展。
您可以在此处查看有关此内容的更多信息:http://jinja.pocoo.org/docs/2.9/extensions/#adding-extensions