使用Jinja2和Django,加载标记不起作用

时间:2017-05-30 21:11:13

标签: python html django django-templates jinja2

我正在构建一个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

2 个答案:

答案 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