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

※本サイトにはプロモーション・広告が含まれています。

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

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

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

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

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

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

  • for文でリスト・タプル・辞書を展開する方法
  • forループで展開時にできること
  • forloopカウンターの使い方

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

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

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

(基本)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変数の使い方

icon
icon

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の作り方はこちら。

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

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

タイトルとURLをコピーしました