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

and*_*rew 7 html python django django-templates jinja2

我正在构建一个Django应用程序,并选择使用Jinja2作为我的模板引擎.我注意到在从Django的内置模板引擎切换到Jinja2之后,load关键字无效,ex : {% load static %}. 这用于加载CSS等静态文件.在Django中是否有针对此的Jinja解决方法?

/ app /上的TemplateSyntaxError
遇到未知标记'load'.

来自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',
    },
},
Run Code Online (Sandbox Code Playgroud)

Django:1.11
Jinja2:2.9.6

e4c*_*4c5 6

这在Djang2模板参考中的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
Run Code Online (Sandbox Code Playgroud)