2017-05-30 35 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