I wrote this article while attending TokyoDjangoMeetup # 3.
Starting with Django 1.8, you can choose Jinja2 as your template engine.
To set it, just write TEMPLATES
in the configuration file as follows.
settings.py
TEMPLATES = [
{
#↓ Rewrite the default value to this
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# context_Do not use it because it does not work if there are processors(See below)
#'context_processors': [
# 'django.template.context_processors.debug',
# 'django.template.context_processors.request',
# 'django.contrib.auth.context_processors.auth',
# 'django.contrib.messages.context_processors.messages',
#],
},
},
]
Jinja2 is not included with Django, so please install Jinja2 separately with pip install Jinja2
.
In settings.py
generated by django-admin start project
, there is context_processors
in'OPTIONS'
, but if you use Jinja2 with this left, the following error will occur. [^ 1]
Exception Type: TypeError
Exception Value:
__init__() got an unexpected keyword argument 'context_processors'
You can use the item ʻenvironment instead of
context_processors. Write ʻapp / jinja2.py
with the following contents,
jinja2.py
from __future__ import absolute_import # Python 2 only
from jinja2 import Environment
from datetime import datetime
def environment(**options):
env = Environment(**options)
#This is context_Instead of processors
env.globals.update({
'greeting': u"HELLO!",
'imananji': datetime.now, #Pass a callable object if you want the result every time you load the page
})
return env
If you write ʻenvironment as follows, you can use
{{greeting}} ,
{{imananji ()}} `in the template.
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# 'app'Part depends on the application configuration
'environment': 'app.jinja2.environment',
},
},
]
[^ 1]: ... Sample code in official documentation casually 'context_processors'
Is erased: cry:
Recommended Posts