旅好きエンジニアのメモ

旅のこと映画、統計、会計、プログラミングなど、気の向くままに語ります

Django1.94にjinja2を入れてみる

Djangoにjinja2を導入する方法を教えてくれているサイトは数多くあるが、

ヴァージョンが違ったりして、うまくいかないことが多い。

 

今回はDjango1.94

   Python3.5

 

でjinja2を導入してみた。

 

Jinja2をインストールする

これは簡単で以下のようにpipでインストールしてあげるだけである。

f:id:tabilike:20160413211128p:plain

Setting.pyをいじってみる。

以下のサイトを参考にした。

http://jonathanchu.is/posts/upgrading-jinja2-templates-django-18-with-admin/

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.contrib.auth.context_processors.auth',
                'django.template.context_processors.debug',
                'django.template.context_processors.i18n',
                'django.template.context_processors.media',
                'django.template.context_processors.static',
                'django.template.context_processors.tz',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

 

これはそのまま入れるだけでよいが、myproject、DIRSなどは自分の使っている名称などに変更してあげる必要がある。

フォルダ構成
$ tree myproject
myproject
├── myproject
│   ├── __init__.py
│   ├── jinja2.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── templates
│   └── jinja2
│       ├── base.html
│       ├── home.html

以上のようなフォルダ構成にする。

また、jinja2.pyはDjangoのアプリを作成したときに自動には作られないので自分で作ってあげる必要がある。

 

内容は以下のものをコピペするだけでよい。

from django.contrib.staticfiles.storage import staticfiles_storage
from django.core.urlresolvers import reverse
from jinja2 import Environment


def environment(**options):
    env = Environment(**options)
    env.globals.update({
        'static': staticfiles_storage.url,
        'url': reverse,
    })
    return env

これでうまくいったりして参考になれば幸いです。