LoginSignup
21
17

More than 5 years have passed since last update.

Django1.8からテンプレートエンジンにJinja2を選べるようになっていた #djangoja

Last updated at Posted at 2015-04-29

この記事は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',
        },
    },
]

  1. ... 公式ドキュメントのサンプルコードではさりげなく 'context_processors'が消されています :cry:  

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17