読者です 読者をやめる 読者になる 読者になる

Djangoのtemplate engineをstandaloneで使う

DjangoPythonのWebアプリケーションフレームワークです.そのテンプレートエンジンのみを使いたいときの設定方法を調べてみたところ新旧様々な情報があり,苦労しましたのでまとめておきます.しかし,後から気づいたのですが,jinja2というテンプレートエンジンがDjangoライクな文法を提供しているようで,テンプレートエンジンのみを使う場合はこちらの方が良いかもしれません…
ちなみに,DjangoのテンプレートエンジンはdjulaというCommon Lisp実装も存在しています.

環境はpython 2.7.10, django1.9.6です.Django自体はpipを用いて,

pip install django==1.9.6

でインストール.もしくは,現時点ではGitHubからリポジトリをクローンしてきても動きました.

import django
from django.conf import settings
from django.template import Context, Template, loader

settings.configure(TEMPLATE_DEBUG=True,
                   TEMPLATES=[{"BACKEND":'django.template.backends.django.DjangoTemplates',
                               "DIRS":"./"}])
django.setup()

t = Template("My name is {{ name }}")
c = Context({"name":"foo"})

print(t.render(c))

t = loader.get_template("index.tmpl")
c = Context({"users":
                 [{"id":0, "name": "hoge"},
                  {"id":1, "name": "foo"}]
             })

print(t.render(c))
index.tmpl
{% for user in users %}
   {{ user.id }} ... {{ user.name }}
{% endfor %}

テンプレートエンジンのみを使うためにはsettings.configureで設定を記述した後に,django.setup()を呼び出す必要があります.BACKENDが使用するテンプレートエンジンの設定で,DIRSが,get_templateで読み込まれるテンプレートを置くディレクトリになるはずです.
ContextにはJSONを読み込んでそのまま流し込むこともできます.ただし,真偽値(True, False)はJSONの値としてそのまま書けないので注意が必要です.