概要
「{{ mustache }}」は多言語対応のテンプレート言語。各種エディタの plugin も提供されていて便利そうなので、試してみた。
ドキュメント
文法は「mustache」を参照。
Python で試してみる
とりあえずPython で試してみる。「Pystache」を使う。
pip install Pystache
「pystache」コマンドがインストールされるので、簡単なサンプルを試してみる。
pystache 'Hello {{name}}' '{"name": "World"}'
普通はテンプレートファイルを作成する。以下のような内容で「sample.txt」として作成。
<html>
<head>
<title>こんにちは {{name}}</title>
</head>
<body>
サンプル
{{#lists}}
<b>{{name}}</b>
{{/lists}}
</body>
</html>
これを利用するソースは以下。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
from pystache.loader import Loader
from pystache import Renderer
class TestPystache(unittest.TestCase):
def test_file(self):
DATA_DIR = './data'
loader = Loader(search_dirs=[DATA_DIR, ],
file_encoding='utf-8',
extension='txt')
template = loader.load_name('sample')
context = {'name': 'World',
'lists': [
{'name': 'a'},
{'name': 'b'},
{'name': 'c'},
],
}
renderer = Renderer()
actual = renderer.render(template, context)
self.assertEqual('<html>\n'
'<head>\n'
'<title>こんにちは World</title>\n'
'</head>\n'
'<body>\n'
'サンプル\n'
' <b>a</b>\n'
' <b>b</b>\n'
' <b>c</b>\n'
'</body>\n'
'</html>\n'.decode('utf-8'),
actual)
if __name__ == '__main__':
unittest.main()
まとめ
多言語対応なのは利点。
Python だと Jinja2 という強力なテンプレートエンジンがあるので、それほど利点がないかもしれない。
テンプレートエンジンの選択肢が少ないような言語だとかなり便利かもしれない。