vorfee's Tech Blog

Just another tech blog

Python Jinja2入門 その2 Jinja2スクリプトの作成

前回に引き続き、Jinja2を使ったテキストテンプレート機能の作成方法を紹介する。

前回の記事は以下。

vorfee.hatenablog.jp

スクリプトの作成

まず、template.txt という名前で以下のテンプレートテキストファイルを作成する。

こんにちは、{{name}}さん!

次に main.py という名前で以下のスクリプトを作成する。

from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('./'))
template = env.get_template('template.txt')
data = { 'name': '田中' }
print(template.render(data))

Pythonでmain.pyを実行すると、{{name}}部分が「田中」に置換された結果が画面に表示される。

PS> python main.py
こんにちは、田中さん!

足早に説明したが、これからスクリプトを1行ずつ紐解いていく。

スクリプトの説明

1~2行目 - 宣言

1~2行目は、jinja2のPythonモジュールを使用する宣言である。

from jinja2 import Environment, FileSystemLoader
  • Environment はJinja2を実行する環境を定義するクラスで、様々な基本設定を行う。
  • FileSystemLoader はテンプレートの読み込み方を定義するクラスで、テンプレートをテキストファイルからを読み込むことができる。

FileSystemLoader以外にも様々な読み込み方があるが、それは後日の紹介とする。

3行目 - 実行環境定義

3行目は、Jinja2の実行環境を新規作成している。

env = Environment(loader=FileSystemLoader('./'))
  • 変数 env にJinja2実行環境インスタンスを代入する。
  • loader にはテンプレートの読み込み方を定義するインスタンスを設定する。
  • FileSystemLoader('./') は、カレントディレクトリを基準のパスとして、テンプレートファイルを探索するというインスタンスである。

4行目 - テンプレートエンジン作成

4行目は、テンプレート実行インスタンス(テンプレートエンジン)を新規作成している。

template = env.get_template('template.txt')
  • 変数 template にテンプレート実行インスタンスを代入する。
  • get_template('template.txt') では、3行目に指定した場所を基準としたテンプレートファイルの名前 を指定し、テンプレート実行インスタンスを作成する。

5行目 - データモデル作成

5行目は、テンプレートに適用するデータを定義している。

data = { 'name': '田中' }
  • 変数 data に辞書を代入する。
  • 辞書のキーに「name」、値に「田中」を指定しており、これはテンプレート内の変数「name」を「田中」に置き換えるという意味になる。

今回はデータをスクリプト上で作成しているが、実際にはCSVファイルにしたり、YAMLファイルにしたり、様々な方法で外部保存することが考えられる。

6行目 - テンプレート実行

6行目は、テンプレートを実行(render)している。

print(template.render(data))
  • template.render(data)では、template.txt に対して data を適用し、その結果を文字列として返す。

今回は説明のために画面上にprintしているが、テンプレート結果はファイルに書き込むほうが一般的だろう。

まとめ

説明は長くなってしまったが、スクリプト自体は非常に短く数分で作成できる。内容も非常に簡潔で理解しやすく、Jinja2が非常に優れたライブラリであることが分かる。

次の記事ではもう少し実用に近いサンプルを示す予定。