2017-05-30 36 views
1

我构建了一个Django应用程序,并选择使用Jinja2作为我的模板引擎。我注意到,从Django内置的模板引擎切换到Jinja2后,load关键字不起作用,例如:{% load static %}。这用于加载像CSS这样的静态文件。在Django中有没有Jinja的解决方法?与Django一起使用Jinja2,加载标记不起作用

TemplateSyntaxError at/app/
遇到未知标签“加载”。

从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:在Jinja2的2.9.6

+0

我很确定它应该工作。 'settings.py'里面的模板设置是什么? –

+0

我使用'settings.py'中的设置进行了更新。获取'未知标记'错误 – andrew

回答

2

这在手册中在Django模板参考

的默认配置是有意保持在最低限度解释了Jinja2。 (例如,使用渲染时())如 模板与一个请求呈现时, 的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 
+0

这很有道理,我用上面的方法设置了一个'jinja2.py'。我删除了'{%负载静态%}'和格式化为'{{静态 '应用程序/ style.css的'}}'和它的作品。感谢您的解释! – andrew

+0

很高兴能有帮助 – e4c5

1

其实,这是预期的行为。这是因为Jinja2标签不是从模板页面加载的,而是在创建过程中将扩展名添加到Jinja2 env中。当它开始运行(并且创建了env)时,您不能添加更多扩展。

你可以看到更多信息对此在这里:http://jinja.pocoo.org/docs/2.9/extensions/#adding-extensions