この記事はTokyoDjangoMeetup #3参加中に書きました。
Django1.8からテンプレートエンジンにJinja2を選べるようになりました。
設定方法は、設定ファイルのTEMPLATES
を以下のように書くだけです。
settings.py
TEMPLATES = [
{
# ↓デフォルトの値をこれに書き換える
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# context_processorsがあると動かないので使わないようにする(後述)
#'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はDjangoに同梱されていないので、pip install Jinja2
で別途Jinja2をインストールしておいてください。
django-admin startproject
で生成されたsettings.py
では'OPTIONS'
にcontext_processors
がありますが、これを残したままJinja2を使うと、以下のエラーが発生します。 1
Exception Type: TypeError
Exception Value:
__init__() got an unexpected keyword argument 'context_processors'
context_processors
の代わりにenvironment
という項目を使えます。app/jinja2.py
を以下のような内容で書いて、
jinja2.py
from __future__ import absolute_import # Python 2 only
from jinja2 import Environment
from datetime import datetime
def environment(**options):
env = Environment(**options)
# これがcontext_processorsの代わりになる
env.globals.update({
'greeting': u"HELLO!",
'imananji': datetime.now, # ページロードのたびに結果を求めたいならcallableなオブジェクトを渡す
})
return env
environment
を以下のように書くと、テンプレートの中で{{ greeting }}
、{{ imananji() }}
が使えるようになります。
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# 'app'の部分はアプリケーションの構成によって変わります
'environment': 'app.jinja2.environment',
},
},
]
-
... 公式ドキュメントのサンプルコードではさりげなく
'context_processors'
が消されています ↩