Jinja2の使い方 | テンプレートエンジン | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

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を生成できるのが特徴です。まずはこの基本をマスターし、次は「テンプレートの継承(共通レイアウトの作成)」や「フィルターを用いたデータ整形」など、より高度な機能へ進むと、より効率的な開発ができるようになるでしょう。