Jinja2の使い方

Jinja2は、FlaskフレームワークでWebページを動的に構築するために欠かせないテンプレートエンジンです。HTML内にPython風の構文を埋め込むことで、サーバー側から受け取ったデータを柔軟に表示することができます。
FlaskとJinja2の連携
Flaskでは render_template 関数を使って、HTMLファイルを読み込み、そこにPythonのデータを渡してブラウザへ返す準備を行います。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
# テンプレートに渡すデータ
data = {
"title": "ようこそ、Flaskアプリへ",
"description": "これはFlaskとJinja2を使ったシンプルなアプリケーションです。",
"items": ["アイテム1", "アイテム2", "アイテム3"]
}
# index.htmlにデータを渡してレンダリング
return render_template('index.html', data=data)
if __name__ == '__main__':
app.run(debug=True)
Jinja2テンプレートの書き方
テンプレートファイル内では、Pythonのデータや制御構文を専用のタグで記述します。
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="ja">
<head>
<title>{{ data.title }}</title>
</head>
<body>
<h1>{{ data.title }}</h1>
<p>{{ data.description }}</p>
<h2>アイテム一覧</h2>
<ul>
{% for item in data.items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
</body>
</html>
よく使うJinja2構文のまとめ
Jinja2では以下のタグを中心に、画面の描画をコントロールします。
| 構文 | 説明 |
|---|---|
{{ 変数 }} |
変数や式の値をHTMLとして出力します。 |
{% if 条件 %} ... {% endif %} |
条件に応じて表示を切り替えます。 |
{% for item in list %} ... {% endfor %} |
リストなどの要素を繰り返し処理します。 |
実務で活用する条件分岐とループ
データが存在しない場合や、複雑なリストを扱う際にも柔軟に対応できます。
{% if data.items %}
<ul>
{% for item in data.items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% else %}
<p>アイテムが見つかりませんでした。</p>
{% endif %}
まとめ
Jinja2を活用することで、静的なHTMLだけでは不可能な「動的なWebページ作成」が可能になります。変数の出力からループや条件分岐といった制御構造まで、Pythonのロジックに近い感覚でHTMLを生成できるのが特徴です。まずはこの基本をマスターし、次は「テンプレートの継承(共通レイアウトの作成)」や「フィルターを用いたデータ整形」など、より高度な機能へ進むと、より効率的な開発ができるようになるでしょう。