Jinja
Jinjaとは?

テンプレートエンジンの基本的な役割は、固定的な構造と動的に変化するデータを切り離して管理することにある。例えば、ECサイトの各Webページはレイアウトや装飾は共通でも、ユーザー名や商品情報などは閲覧ごとに異なる。Jinjaを使うと、変化する部分だけを特殊な記法で記述しておき、プログラムが実行される際に実際の値へ置き換えられる。表示用の記述と処理ロジックを分離して管理できる。
記法は波括弧を使った3種類で構成される。{{ }} は変数や式の出力、{% %} はif文やfor文などの制御構文、{# #} はコメントにそれぞれ対応する。たとえば {{ user_name }} と書けばユーザー名が挿入され、{% for item in items %} を使えば商品一覧を自動的に繰り返し出力できる。PythonのコードそのままではなくHTMLの構造を保ちながら記述できるため、比較的習得しやすい。
テンプレートの継承機能も備えており、ヘッダーやフッターなどのサイト共通部分を親テンプレートに定義し、各ページ固有の内容だけを子テンプレートで上書きすることができる。共通部分を一か所で管理できるため、大規模なサイトでも変更を一括適用しやすく、保守の手間を抑えられる。
セキュリティ面では、HTML特殊文字を自動的に無害な形式へ変換するエスケープ機能をデフォルトで有効にしている。利用者による入力をそのまま出力するとクロスサイトスクリプティング(XSS)攻撃に悪用される恐れがあるが、この機能により開発者が個別に対処しなくても標準的な安全性が確保される。
「Jinja」という名称は日本語の「神社」に由来するとされる。現在はFlaskによるWeb開発にとどまらず、インフラ自動化ツールのAnsibleや各種構成管理ツールでのテンプレート記述にも採用されており、Pythonエコシステム全体で標準的なテンプレートエンジンとして定着している。