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
- py/
- templates/
- src/
以下コードは、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()