JinjaはPythonのウェブフレームワークであるFlaskやDjangoなどでよく使用されるテンプレートエンジンです。Jinjaでは、HTMLのテンプレート内で動的にデータを埋め込むことができ、プログラム的なロジックを埋め込むことが可能です。その中でよく使用される構文の一つが「for」ループです。この「for」ループは、繰り返し処理をテンプレート内で簡単に実行するために使用されます。本記事では、Jinjaの「for」ループの使い方について、基礎から応用までを完全かつ包括的に解説します。
1. Jinjaでの「for」ループの基本構文
Jinjaにおける「for」ループは、Pythonの標準的な「for」ループに似た形をしています。基本的な構文は以下の通りです。

jinja{% for item in sequence %} {{ item }} {% endfor %}
ここで、sequence
はリスト、タプル、または辞書など、反復可能なオブジェクトを指します。ループ内では、item
という変数が sequence
内の各要素に順番に設定されます。
例えば、リストを使ってアイテムを繰り返し表示する例を考えてみましょう。
jinja{% for item in ["りんご", "バナナ", "みかん"] %}
{{ item }}
{% endfor %}
このコードは、以下のようなHTMLを生成します。
html<p>りんごp>
<p>バナナp>
<p>みかんp>
2. ループインデックスの使用
「for」ループ内で、現在のループインデックス(繰り返し回数)を取得することもできます。Jinjaでは、loop.index
や loop.index0
を使って、インデックスを取得できます。
-
loop.index
: 1から始まるインデックス -
loop.index0
: 0から始まるインデックス
例えば、リストの要素とそのインデックスを表示する場合、以下のように記述します。
jinja{% for item in ["りんご", "バナナ", "みかん"] %}
{{ loop.index }}: {{ item }}
{% endfor %}
このコードは、以下のように出力されます。
html<p>1: りんごp>
<p>2: バナナp>
<p>3: みかんp>
インデックスが0から始まる場合は、loop.index0
を使用します。
jinja{% for item in ["りんご", "バナナ", "みかん"] %}
{{ loop.index0 }}: {{ item }}
{% endfor %}
出力結果は以下のようになります。
html<p>0: りんごp>
<p>1: バナナp>
<p>2: みかんp>
3. ループの開始・終了処理
Jinjaでは、loop.first
や loop.last
を使って、ループの最初や最後の要素に対して特別な処理を施すことができます。
-
loop.first
: 最初の繰り返しでTrue -
loop.last
: 最後の繰り返しでTrue
例えば、リストの最初と最後の要素を強調する場合は以下のように記述できます。
jinja{% for item in ["りんご", "バナナ", "みかん"] %} {% if loop.first %} 最初: {{ item }} {% elif loop.last %} 最後: {{ item }} {% else %} {{ item }} {% endif %} {% endfor %}
出力結果は以下のようになります。
html<strong>最初: strong>りんご
バナナ
<strong>最後: strong>みかん
4. ループ内での条件分岐
Jinjaの「for」ループ内では、通常の条件分岐(if
文)を使うことができます。これを利用して、特定の条件を満たす要素のみを表示することができます。
例えば、リスト内の特定の文字列が含まれている場合のみ表示する場合、以下のように記述します。
jinja{% for item in ["りんご", "バナナ", "みかん"] %} {% if item == "バナナ" %}
{{ item }}は好きなフルーツです。
{% endif %} {% endfor %}
出力結果は以下のようになります。
html<p>バナナは好きなフルーツです。p>
5. ループで辞書を使う
Jinjaでは、リストだけでなく辞書(キーと値のペア)も「for」ループで反復処理することができます。辞書のキーと値を取得するには、for
文内で key, value
のペアを使います。
例えば、辞書のキーと値を表示する場合、以下のように記述します。
jinja{% for key, value in {"apple": 3, "banana": 5, "orange": 2}.items() %}
{{ key }}: {{ value }}
{% endfor %}
このコードは以下のように出力されます。
html<p>apple: 3p>
<p>banana: 5p>
<p>orange: 2p>
6. ループの逆順処理
Jinjaでは、reverse
フィルターを使ってループの順番を逆にすることもできます。これを使うと、リストやタプルなどのデータを逆順で表示することができます。
例えば、逆順でリストを表示する場合、以下のように記述します。
jinja{% for item in ["りんご", "バナナ", "みかん"]|reverse %}
{{ item }}
{% endfor %}
このコードは以下のように出力されます。
html<p>みかんp>
<p>バナナp>
<p>りんごp>
7. 空のリストや条件に対応するための「for」ループ
Jinjaでは、「for」ループを使って空のリストや条件に対するデフォルトの表示を行うこともできます。else
キーワードを使うことで、リストが空であった場合の代替処理を記述できます。
例えば、リストが空であった場合に「リストは空です」と表示する場合、以下のように記述します。
jinja{% for item in [] %}
{{ item }}
{% else %}リストは空です
{% endfor %}
出力結果は以下のようになります。
html<p>リストは空ですp>
まとめ
Jinjaの「for」ループは、テンプレートエンジン内でデータを反復処理し、動的にコンテンツを生成するための非常に強力なツールです。基本的な繰り返しから、インデックスや条件分岐、辞書の処理、逆順表示など、さまざまな機能を活用することで、より柔軟で効果的なテンプレートを作成することができます。Jinjaを使いこなすことで、Pythonのウェブ開発におけるテンプレート処理を大幅に効率化できます。