Django のテンプレートシステムをローカルアプリケーションで使う

Python で実装された Web アプリケーションフレームワーク DjangoHTML テンプレートエンジンだけを、スタンドアロンローカル・アプリケーション)で利用します。

以下の Python スクリプトrenderer.py などの名前で保存して、実行します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from django.template import Context, Template
from django.conf import settings
import codecs, sys
sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)

# テンプレートシステムをスタンドアロンモードに設定
settings.configure(DEBUG=True, TEMPLATE_DEBUG=True, TEMPLATE_DIRS=())

def generate(template_name, template_values={}):
    directory = os.path.dirname(__file__)
    path = os.path.join(directory, template_name)
    template = Template(open(path).read())
    context = Context(template_values)
    return template.render(context)

以下はテンプレート用 HTML ファイルの例。

<!-- template.html -->
<div id="my-content">
  {% for entry in entries %}
  <div class="my-entry">
    <p>{{ entry.word }}</p>
    {% for image in entry.images %}
    <div class="my-image">
      <img src="{{ image }}" alt="{{ entry.word }}" />
    </div>
    {% endfor %}
  </div>
  {% endfor %}
</div>

template.html の解析用に、renderer.py の末尾に以下を追加します。

def main():
    values = {
        'entries': [
            {
                'word': 'minecraft', 
                'images': ['http://t3.gstatic.com/images?q=tbn:ANd9GcTTkWQ_QFXFrYxDCFV0Y6LP1pFnWhMSoiIzj5fsmT0QlwQ4VDPsaBGfiaaS', 'http://t2.gstatic.com/images?q=tbn:ANd9GcTBfkEbsnB9v5qlJWe2lSRp9MIsPKRB93tpOsV2v3yFvnl_bWhC_xscKb8'], 
                }, 
            {
                'word': u'パワプロ', 
                'images': ['http://t2.gstatic.com/images?q=tbn:ANd9GcT0UZ0KiCTQGIUuifYOJLNweUXJTdvb4pU55m9ITGmhjhi3PFq_LxvjzD4', 'http://t3.gstatic.com/images?q=tbn:ANd9GcRLZ_ec5mUYdW9kTmxOjRYUzeSseyx5hhdCjif-k1-mv_t5PxSTc3PsJpEQ'], 
                }, 
            ]
        }
    print generate('template.html', values)

if __name__ == '__main__':
    main()

実行結果は以下のようになります。


参考:Python プログラマのための Django テンプレート言語ガイド — Django v1.0 documentation