【Django】テンプレートタグ:forタグによるループの利用方法

時計 2022.01.09 / 時計

【Django】テンプレートタグ:forタグによるループの利用方法

本記事ではPythonのWebフレームワークDjangoにおける、テンプレートタグの一つforタグによるループの利用方法について解説していきます。

forタグによるループはさまざまな使い方が存在します。知っておけば開発に役立つforタグの便利な使い方がたくさんあります。

ぜひ本記事を通して学んでください。

forタグで使用する変数について

テンプレートではviews.pyから「コンテキスト」と呼ばれるオブジェクトが渡されます。

コンテキストとは変数と値がマッピングさえたオブジェクトであり、views.pyでは以下のようにしてコンテキストをテンプレートに渡します。

def index(request):
    books = Book.objects.all()
    context = {"books": books,}
    return render(request, "index.html", context)

上記では変数名がbooks、値(リスト)がリストbooksのcontextがrenderメソッドでテンプレートに渡されています。

テンプレートではコンテキストに格納された変数にアクセスすることで値を取得することができるのです。

コンテキスト以外にも以下に記す変数をテンプレートでは利用できます。

  • request:リクエストオブジェクト
  • user:ユーザー情報
  • perms:ユーザーの権限
  • messages:フラッシュメッセージ

forタグの構文

開始タグ{% for … %}と終了タグ{% endfor %}の間に記述されたプログラムをループさせます。

構文

{% for in 変数 %} … {% endfor %}

変数に格納されている要素の数だけループを回します。

変数のループ

リスト型、タプル型の変数をループする

forタグの基本的な利用方法である、リスト型の変数をループしてみます。

# values = ["python", "django", "office54"]

{% for value in values %}
    <p>{{ value }}</p>
{% endfor %}
# <p>python</p>
# <p>django</p>
# <p>office54</p>

上記のように変数に格納されている要素数分だけループが回ります。

変数の値がタプル型でも同様の方法をとります。

辞書型の変数をループする

forループで変数に格納されている辞書型のkeyとvalueを一度に取り出すことができます。

# dic = {"A":"python", "B":"django", "C":"office54"}

{% for key, value in dic.items %}
    <p>{{ key }}{{ value }}</p>
{% endfor %}

変数の値が空の場合の対処:emptyタグ

変数の値が空の場合や、変数が存在しない場合ではループは回りません。

そういった変数が空の時に表示する内容をemptyタグで指定しておくことができます。

{% for value in values %}
    <p>{{ value }}</p>
{% empty %}
    <p>Empty</p>
{% endfor %}

要素を逆順に取り出す:reversed

変数に格納された要素を逆順に取り出したい場合はreversedを使用します。

{% for value in values reversed %}
    <p>{{ value }}</p>
{% endfor %}

ループ内で利用できる特別な変数

forタグのループにはループ内でのみ利用できる特別な変数があります。

変数名 説明
forloop.first 最初のループかどうか
forloop.last 最後のループかどうか
forloop.counter ループ回数(1からスタート)
forloop.revcounter 逆順のループ回数

ループの最初を特定

forloop.firstを利用することでループの最初を特定し、そのときだけの表示をすることができます。

{% for value in values %}
    {% if forloop.first %}
    	<p>最初のループ</p>
    {% else %}
        <p>2番目以降のループ</p>
    {% endif %}
{% endfor %}

ループの最後を特定

forloop.lastを利用することでループの最後を特定し、そのときだけの表示をすることができます。

{% for value in values %}
    {% if forloop.last %}
    	<p>最後のループ</p>
    {% else %}
        <p>最後以外のループ</p>
    {% endif %}
{% endfor %}

ループのカウントを取得

forloop.counterを利用することで現在のループ回数を表示することができます。

{% for value in values %}
    <p>count: {{ forloop.counter }}</p>
    <p>value: {{ value }}</p>
{% endfor %}

まとめ

本記事「【Django】テンプレートタグ:forタグによるループの利用方法」はいかがでしたか。

ぜひ本記事で学んだforタグの利用方法をテンプレートで使ってみてください。