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

Django

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

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

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

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

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

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

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

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

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

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

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

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

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

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

公式LINEも始めました。ブログの更新や最新の業界情報などを随時配信します!

友だち追加

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