vorfee's Tech Blog

Just another tech blog

Python Jinja2入門 その1 基礎知識

Pyhonに Jinja というライブラリがある。Jinjaを使用するとテキストファイルの一部を文字列置換できる。

Jinja is a fast, expressive, extensible templating engine. Special placeholders in the template allow writing code similar to Python syntax. Then the template is passed data to render the final document.

Jinjaは高速で表現に富み、拡張可能なテンプレートエンジンです。Pythonに似た文法で、特別なマークをテンプレートファイルに埋め込むことができます。マーク箇所は渡されたデータに置き換えられて出力されます。

-Jinja Documentationより引用、筆者訳 https://jinja.palletsprojects.com/

この記事では第一弾として、Jinjaでできることを簡単に紹介する。

Jinjaって何?

Jinjaはテンプレートエンジンである。テンプレートエンジンとは、Wikipediaで以下のように定義される。

テンプレートエンジンはテンプレートと呼ばれる雛形と、あるデータモデルで表現される入力データを合成し、成果ドキュメントを出力するソフトウェアまたはソフトウェアコンポーネントである。

テンプレートエンジン - Wikipedia

なお、ひな形を使わずにドキュメントを生成するソフトウェアはジェネレータなどと呼ばれる。

テンプレートエンジンはひな形の一部を置き換えるという単純な処理ゆえに適用範囲が広く、高い汎用性がある。ジェネレータは生成するドキュメントの内容(構文)を解析・把握できる機能が求められ、複雑な処理をこなすことができる反面、汎用性に乏しい。

Jinjaの用語

Jinjaで使われる用語を紹介する。難しい用語はないが、覚えておけばプログラムを書く際の助けとなる。

用語 日本語表記 説明
Template テンプレート テンプレート処理、またはテンプレート処理に用いられるテキストのこと。
Template Engine テンプレートエンジン Jinja2のこと。テンプレートを実行するシステム。
Environment (プログラム用語)テンプレートエンジンの基本設定を取り扱うPythonクラス。
Loader (プログラム用語)テンプレートの読み込み方を取り扱うPythonクラス。

Jinjaでできること

先にも述べたが、Jinjaはテンプレートエンジンである。Jinjaでできることのうち、主要なものを紹介する。

  • 変数の置換
  • for(繰り返し)
  • if(条件分岐)
  • include(ファイル分割)

変数の置換

{{変数名}} と表記した個所の変数を置換できる。

こんにちは {{user_name}} さん!

変数が数値の場合、四則演算ができる。

参考: https://jinja.palletsprojects.com/templates/#variables

for (繰り返し)

{% for item in items %} の形式で繰り返し処理ができる。

{% for person in people %}
氏名:{{person.name}} 年齢:{{person.age}} 性別:{{person.sex}}
{% endfor %}

参考: https://jinja.palletsprojects.com/en/3.0.x/templates/#for

if (条件分岐)

{% if 条件式 %} の形式で条件分岐ができる。

{% if age < 18 %}
18歳以下は閲覧できません。
{% endif %}

参考: https://jinja.palletsprojects.com/en/3.0.x/templates/#if

include(ファイル分割)

{% include "テンプレートファイル" %} でテンプレートファイルを分割、テンプレート処理時に結合できる。

{% include "template2.j2" %}

参考: https://jinja.palletsprojects.com/en/3.0.x/templates/#include

次回はスクリプトを書き、Jinjaでテキスト置換をする方法を紹介する。

vorfee.hatenablog.jp