(最終更新月:2022年8月)
✔このような方へ向けて書かれた記事となります
「Djangoのtemplateでfor文が使いたい!」
「Djangoのfor文はどんなことができるの?」
「実際のコードも見ながら解説してほしい!」
✔当記事を通じてお伝えすること
- for文でリスト・タプル・辞書を展開する方法
- forループで展開時にできること
- forloopカウンターの使い方
当記事を最後までご覧いただければ、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つの変数を渡していることを確認してください。
- リスト:object_list
- タプル:object_tuple
- 辞書:object_dict
- 空のリスト:object_empty
リストを展開する
リストは以下のようにして展開します。
【テンプレート上のコード】
<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.counter
- forloop.revcounter
- forloop.revcounter0
- forloop.first
- forloop.last
それぞれ見ていきましょう。
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ループは、{% for 変数 in リスト・タプル・辞書 %}で始まる
- forループは、{% endfor %}で終わる
- 値を取り出すだけでなく、空のリストや逆順にする方法がある
- forloopで、ループの回数にまつわる値を取り出せる
for文は、一覧ページなどを作る際に多用する手法です。
ListViewの作り方はこちら。
何ができるかを頭にいれておけば、後々役に立つことは間違いありません。
忘れてしまったときは、いつでも当ブログに戻ってきてください。