bii*_*iju 23 python django jinja2
我一直在研究如何在django 1.8中使用jinja2,但是没有完整的源代码来使用django和jinja2.我想知道你们是否知道在django中使用jinja2的过程.我查看了官方文档并查看了以下问题:如何设置django 1.8以使用jinja2?
但是他们都没有清楚地解释如何以一种放弃的方式使用jinja2.我刚开始使用django并且不知道文档中的所有术语.我真的很感激帮助.
dor*_*oru 24
首先你必须安装jinja2:
$ pip install Jinja2
Run Code Online (Sandbox Code Playgroud)
然后修改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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这使得static与url在您所在的Jinja2模板.
PS有关详细信息,请参阅此文章.
花了我一些时间来弄清楚一切,这里的答案并不是那么有用.
doru的答案最接近真相,但不完整.
如何使用jinja作为模板语言:
1.在项目文件夹中创建jinja2.py文件.这是修改默认jinja2环境所必需的(在我们的例子中,传递一些额外的全局变量).
地点: {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
Run Code Online (Sandbox Code Playgroud)
2.将jinja2后端添加到django项目设置文件,包括我们修改过的环境.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'environment': "main.jinja2.environment",
},
},
...
]
Run Code Online (Sandbox Code Playgroud)
3.现在你不再需要在任何地方导入jinja2,在你的视图中,你将像django模板一样通过django使用jinja模板:
from django.shortcuts import render
def index(request, **kwargs):
return render(request, "index.html.j2", {'title': 'MyTitle', 'text': "MyText"})
Run Code Online (Sandbox Code Playgroud)
最后,将APP_DIRS设置为True,jinja将搜索所有已安装的应用程序jinja2目录中的模板.(与搜索templates文件夹的DTL不同).如果你想改变那种行为,或者想要一些额外的调整,比如扩展匹配,过滤或全局变量,你应该看看django-jinja扩展.
您还可以通过TEMPLATES['DIRS']设置选项提供其他目录来搜索模板.
来自 Django网站(请查看此以获得进一步指导)settings.py:
TEMPLATES = [\n {\n \'BACKEND\': \'django.template.backends.django.DjangoTemplates\',\n \'DIRS\': [],\n \'APP_DIRS\': True,\n \'OPTIONS\': {\n # ... some options here ...\n },\n },\n]\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\nBACKEND 是实现 Django\xe2\x80\x99s 模板后端 API 的模板引擎类的点分 Python 路径。内置后端是 django.template.backends.django.DjangoTemplates 和 django.template.backends.jinja2.Jinja2。
\n
基本上找出 settings.py 文件中的何处有 TEMPLATES 变量并设置后端(或确保后端)与上面的类似(因为 Jinga 是内置的)。如果全部失败,请将其替换django.template.backends...为django.template.backends.jinja2.Jinja2(尽管我认为没有必要)。