やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

PythonのテンプレートエンジンJinja2を使ってみた

インストールから動作確認までできた。使えそう。

成果物

手順

仮想環境

作成。

$ cd /home/pi/root/env/py
$ python -m venv template

有効化。

$ . /home/pi/root/env/py/template/bin/activate

インストール

$ pip install jinja2
Collecting jinja2
  Downloading Jinja2-2.10-py2.py3-none-any.whl (126kB)
    100% |████████████████████████████████| 133kB 1.0MB/s 
Collecting MarkupSafe>=0.23 (from jinja2)
  Using cached MarkupSafe-1.0.tar.gz
Installing collected packages: MarkupSafe, jinja2
  Running setup.py install for MarkupSafe ... done
Successfully installed MarkupSafe-1.0 jinja2-2.10

バージョン確認

$ pip list
Jinja2 (2.10)
MarkupSafe (1.0)
pip (9.0.1)
setuptools (28.8.0)

動作確認

参考

A. インタプリタ実行

$ python
>>> from jinja2 import Template
>>> template = Template('私は {{ name }} に入信した!')
>>> template.render(name='Jinja2')
'私は Jinja2 に入信した!'

テンプレの{{ }}内にキーワードを書く。値を辞書で渡す。

B. 外部ファイルから読む

ディレクトリ構造は以下。

  • ./
    • src/
      • 1.py
    • res/
      • templates/
        • py/
          • class.py

以下コードは、class.pyテンプレの{{ Name }}MyClassに置換する。

./src/1.py

from jinja2 import Template, Environment, FileSystemLoader
import pathlib

path_tpl = (pathlib.Path(__file__).parent.parent / 'res/templates').resolve()
env = Environment(loader=FileSystemLoader(str(path_tpl )))
template = env.get_template('py/class.py')
print(template.render(Name='MyClass'))

./res/templates/py/class.py

class {{ Name }}:
    def __init__(self):
        print('init')

if __name__ == '__main__':
    c = {{ Name }}()

実行。

$ python ./src/1.py

結果。

class MyClass:
    def __init__(self):
        print('init')

if __name__ == '__main__':
    c = MyClass()