サイトアイコン ITC Media

【実例付】Djangoテンプレートでできるforループの全て

(最終更新月:2022年8月)

✔このような方へ向けて書かれた記事となります

「Djangoのtemplateでfor文が使いたい!」

「Djangoのfor文はどんなことができるの?」

「実際のコードも見ながら解説してほしい!」

✔当記事を通じてお伝えすること

当記事を最後までご覧いただければ、for文の基本的な使い方はもちろん、あまり知られていない便利な展開方法まで知ることができ、forループのほぼ全てを理解できます。

ぜひ最後までご覧ください。

(基本)forループでリスト・タプル・辞書を展開する

こちらではforループの基本として、以下の展開について実例とともに解説をします。

当記事で使うView関数は以下のとおりです。

【views.pyのコード】

from django.shortcuts import render

def myapp_list_view(request):
    ctx = {}
    ctx["object_list"] = ["python", "javascript", "html", "css"]
    ctx["object_tuple"] = ("python", "javascript", "html", "css")
    ctx["object_dict"] = {"P": "python", "J": "javascript", "H": "html", "C": "css"}
    ctx["object_empty"] = []
    return render(request, "myapp/myapp_list.html", ctx)

4つの変数を渡していることを確認してください。

リストを展開する

リストは以下のようにして展開します。

【テンプレート上のコード】

<p><strong>[リストの展開]</strong></p>
{% for l in object_list %}
    <p>{{ l }}</p>
{% endfor %}

展開した結果はこちらになります。

タプルを展開する

タプルは以下のようにして展開します。

【テンプレート上のコード】

<p><strong>[タプルの展開]</strong></p>
{% for t in object_tuple %}
    <p>{{ t }}</p>
{% endfor %}

展開した結果はこちらになります。

タプルは、リストの展開方法と違いはありません

辞書を展開する

辞書の取り出し方を3通りご紹介します。

それぞれのコードと結果をご覧ください。

キーと値を取り出す

辞書は以下のように展開し、「キー」と「値」を取り出します。

【テンプレート上のコード】

<p><strong>[辞書の展開:キーと値]</strong></p>
{% for key, value in object_dict.items %}
    <p>{{ key }}: {{ value }}</p>
{% endfor %}

展開した結果はこちらになります。

キーのみ取り出す

辞書は以下のように展開し、「キー」のみを取り出します。

【テンプレート上のコード】

<p><strong>[辞書の展開:キーのみ]</strong></p>
{% for key in object_dict.keys %}
    <p>{{ key }}</p>
{% endfor %}

展開した結果はこちらになります。

値のみ取り出す

辞書は以下のように展開し、「値」のみを取り出します。

【テンプレート上のコード】

<p><strong>[辞書の展開:値のみ]</strong></p>
{% for value in object_dict.values %}
    <p>{{ value }}</p>
{% endfor %}

展開した結果はこちらになります。

(中級)forループの応用

こちらでは、中級者向けのリスト展開方法をお伝えします。

空のリストを展開する

リストが空の可能性があるときは以下のように、「emptyタグ」を使うと安全です。

【テンプレート上のコード】

<p><strong>[空リストの展開]</strong></p>
{% for e in object_empty %}
    <p>{{ e }}</p>
{% empty %}
    <p>リストは空です</p>
{% endfor %}

展開した結果はこちらになります。

リストを逆順に展開する

中のリストをいじらずに、反対方向から展する方法もあります。

【テンプレート上のコード】(リストは、[“python”, “javascript”, “html”, “css”]

<p><strong>[リストを逆順に展開]</strong></p>
{% for l in object_list reversed%}
    <p>{{ l }}</p>
{% endfor %}

展開した結果はこちらになります。

リストの一部を取り出す

リストの一部を取り出す方法として、3通りお伝えします。

一部を取り出すには、テンプレートフィルタ「slice」を使います。

最初の◯個を展開

最初の2個を展開するには、「|slice: “:2″」を使います。

【テンプレート上のコード】(リストは、[“python”, “javascript”, “html”, “css”]

<p><strong>[最初の2個を展開]</strong></p>
{% for l in object_list|slice:":2" %}
    <p>{{ l }}</p>
{% endfor %}

展開した結果はこちらになります。

最後の◯個を展開

最後の2個を展開するには、「|slice: “2:”」を使います。

【テンプレート上のコード】(リストは、[“python”, “javascript”, “html”, “css”]

<p><strong>[最後の2個を展開]</strong></p>
{% for l in object_list|slice:"2:" %}
    <p>{{ l }}</p>
{% endfor %}

展開した結果はこちらになります。

途中の◯個を展開

途中の2個を展開するには、「|slice: “1:3″」などのように使います。

【テンプレート上のコード】(リストは、[“python”, “javascript”, “html”, “css”]

<p><strong>[途中の2個を展開]</strong></p>
{% for l in object_list|slice:"1:3" %}
    <p>{{ l }}</p>
{% endfor %}

展開した結果はこちらになります。

forloop変数の使い方

Djangoテンプレートのfor文では、特殊な変数「forloop」が使えます。

forloopは、forループの回数に関わる値が格納されています。

使い方は以下の6つです。

それぞれ見ていきましょう。

forloop.counter0

「forloop.counter0」は、forループした回数を0からスタートして数えます。

テンプレート上で以下のように記述します。

<p><strong>[0から数える:counter0]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.counter0 }}</p>
{% endfor %}

結果はこちら。

forloop.counter

「forloop.counter」は、forループした回数を1からスタートして数えます。

テンプレート上で以下のように記述します。

<p><strong>[1から数える:counter]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.counter }}</p>
{% endfor %}

結果はこちら。

forloop.revcounter0

「forloop.revcounter0」は、forループした回数を逆から数えて、最後は0になります。

テンプレート上で以下のように記述します。

<p><strong>[逆から数えて0で終わる:revcounter0]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.revcounter0 }}</p>
{% endfor %}

結果はこちら。

forloop.revcounter

「forloop.revcounter」は、forループした回数を逆から数えて、最後は1になります。

テンプレート上で以下のように記述します。

<p><strong>[逆から数えて1で終わる:revcounter]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.revcounter }}</p>
{% endfor %}

結果はこちら。

forloop.first

「forloop.first」は、最初のforループだけ「True」になります。

テンプレート上で以下のように記述します。

<p><strong>[最初だけ「True」:first]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.first }}</p>
{% endfor %}

結果はこちら。

forloop.last

「forloop.last」は、最後のforループだけ「True」になります。

テンプレート上で以下のように記述します。

<p><strong>[最後だけ「True」:last]</strong></p>
{% for l in object_list %}
    <p>{{ forloop.last }}</p>
{% endfor %}

展開した結果はこちらになります。

まとめ:for文には意外とたくさんの機能が詰まっている

当記事の内容をまとめます。

for文は、一覧ページなどを作る際に多用する手法です。

ListViewの作り方はこちら。

何ができるかを頭にいれておけば、後々役に立つことは間違いありません。

忘れてしまったときは、いつでも当ブログに戻ってきてください。

モバイルバージョンを終了