[英]How to use jinja2 as a templating engine in Django 1.8
我一直在研究如何在django 1.8中使用jinja2,但是沒有完整的源代碼來使用django和jinja2。 我想知道你們是否知道在django中使用jinja2的過程。 我查看了官方文檔並查看了以下問題: 如何設置django 1.8以使用jinja2?
但是他們都沒有清楚地解釋如何以一種放棄的方式使用jinja2。 我剛開始使用django並且不知道文檔中的所有術語。 我真的很感激幫助。
首先你必須安裝jinja2
:
$ pip install Jinja2
然后修改settings.py中的 TEMPLATES
列表以包含jinja2
BACKEND
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [os.path.join(BASE_DIR, 'templates/jinja2')],
'APP_DIRS': True,
'OPTIONS': {'environment': 'myproject.jinja2.Environment',},
},
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
其中templates/jinja2
是您的jinja2模板文件的目錄。
並在您的views.py文件中:
from __future__ import absolute_import # Python 2 only
from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse,
})
return env
這使得Jinja2模板中的static
和url
可用。
PS有關詳細信息,請參閱此文章 。
花了我一些時間來弄清楚一切,這里的答案並不是那么有用。
doru的答案最接近真相,但不完整。
如何使用jinja作為模板語言:
1.在項目文件夾中創建jinja2.py文件。 這是修改默認jinja2環境所必需的(在我們的例子中,傳遞一些額外的全局變量)。
location: {root}/main/jinja2.py:
from __future__ import absolute_import # Python 2 only
from jinja2 import Environment
from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.urlresolvers import reverse
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse,
})
return env
2.將jinja2后端添加到django項目設置文件,包括我們修改過的環境。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'environment': "main.jinja2.environment",
},
},
...
]
3.現在你不再需要在任何地方導入jinja2,在你的視圖中,你將像django模板一樣通過django使用jinja模板:
from django.shortcuts import render
def index(request, **kwargs):
return render(request, "index.html.j2", {'title': 'MyTitle', 'text': "MyText"})
最后,將APP_DIRS設置為True,jinja將在所有已安裝的應用程序jinja2
目錄中搜索模板。 (與搜索templates
文件夾的DTL不同)。 如果你想改變那種行為,或者想要一些額外的調整,比如擴展匹配,過濾或全局變量,你應該看看django-jinja擴展。
您還可以通過TEMPLATES['DIRS']
設置選項提供其他目錄來搜索模板。
混合Django和Jinja2模板: 環境:Django 1.8 + Jinja2 。
我有一些遺留的Django模板,將它們一次性重寫到Jinja2並不是那么容易,所以將這個自定義{% jinja_include "some_template.jinja" %}
標記添加到my_custom_tags.py
:
from django.template.loader import get_template
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def jinja_include(context, filename):
template = get_template(filename)
return template.render(context.flatten())
從你的Django模板中調用它:
{% load my_custom_tags %}
{% jinja_include "some_template.jinja" %}
從settings.py
的Django 網站 (請查看此內容以獲取進一步指導):
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# ... some options here ...
},
},
]
BACKEND是實現Django模板后端API的模板引擎類的虛線Python路徑。 內置的后端是django.template.backends.django.DjangoTemplates和django.template.backends.jinja2.Jinja2。
基本上找出settings.py文件中的TEMPLATES變量的位置並設置后端(或確保后端)類似於上面的那個(因為Jinga是內置的)。 如果所有失敗,請更換django.template.backends...
用django.template.backends.jinja2.Jinja2
(雖然我不認為這是必要的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.