備忘録

【Jinja2】for文の中で使えるloopについて

前提

Python: 3.12
Jinja2: 3.1.3

Jinja2のloop変数とは

Jinja2のloop変数は、for文などのループ処理内で自動的に生成され、ループの状況に関する情報を提供してくれる。ループの現在のインデックスや、ループが最後尾かどうかなどを簡単に取得できるため、複雑なループ処理をシンプルに記述することが可能になる。

loop.index: ループの現在位置を取得

loop.indexは、ループ内で現在処理している要素のインデックス(1始まり)を取得する際に使用する。例えば、以下のように記述すると、リストの各要素の前に連番を付けて表示できる。

<ul>
  {% for item in items %}
    <li>{{ loop.index }}. {{ item }}</li>
  {% endfor %}
</ul>

itemsリストの内容が["apple", "banana", "orange"]だと、以下のように表示される。

1. apple
2. banana
3. orange

loop.index0: 0始まりでインデックスを取得

loop.index0loop.indexと同様にループ内の現在位置を取得できるが、こちらは0始まりとなる。Pythonのリストやタプルのインデックスは0始まりであることが多いので、合わせて使うと便利。

<ul>
  {% for item in items %}
    <li>インデックス: {{ loop.index0 }}, 値: {{ item }}</li>
  {% endfor %}
</ul>

loop.first & loop.last: 最初のループ、最後のループを判定

loop.firstはループの最初のイテレーションである場合にTrue、そうでない場合はFalseを返す。loop.lastはループの最後のイテレーションである場合にTrueを返す。これらの変数を活用すると、最初の要素や最後の要素だけ異なる処理をしたい場合に便利だ。

<ul>
  {% for item in items %}
    {% if loop.first %}
      <li>最初の要素: {{ item }}</li>
    {% elif loop.last %}
      <li>最後の要素: {{ item }}</li>
    {% else %}
      <li>{{ item }}</li>
    {% endif %}
  {% endfor %}
</ul>

loop.length: ループの要素数を取得

loop.lengthは、ループ対象の要素数を取得できる。ループの回数を事前に知りたい場合などに役立つ。

<p>全{{ loop.length }}件のデータを表示します。</p>
<ul>
  {% for item in items %}
    <li>{{ item }}</li>
  {% endfor %}
</ul>

関連記事

  • 【Python】文字列メソッドの使い方
    前提 Python: 3.12 参考 文字列メソッド — 組み込み型 — Python 3.12.3 ドキュメント Pythonの文字列メソッド Pythonを使いこなす上で、文字列処理は避けて通れない
  • 【Python】Pythonのurllibの使い方
    前提 Python: 3.12 参考 urllib.request — Extensible library for opening URLs — Python 3.12.3 ドキュメント urllibとは? - Python標準のWeb通信ライブラリ urllibは、URL (Uniform Resource Locator) を扱うため
  • 【Python】PythonのPathlibの使い方
    前提 Python: 3.12 基本 from pathlib import Path # カレントディレクトリからの相対パス file_path = Path("my_folder/my_file.txt") # ファイルが存在するか確認 if file_path.exists(): print("ファイルは存在します
  • 【Python】Pythonのos.pathの使い方
    前提 Python: 3.12 基本 import os.path file_path = os.path.join("data", "myfile.txt") if os.path.exists(file_path): print("ファイルは存在します") else: print("ファイルは存在しません")
  • 【Python】Pythonのargparseの使い方
    前提 Python: 3.12 参考 argparse — Parser for command-line options, arguments and sub-commands — Python 3.12.3 ドキュメント Pythonでコマンドライン引数を扱うための標準モジュール argparseは、ユーザーフレン