【django】template でのループのやり方とカウンタの表示の仕方をわかりやすく解説!【python】

今回は django で template(テンプレート) ファイルでのループの方法についてわかりやすく解説していきます。
template ファイルでループを使用する場面はかなり多いと思いますので、すぐ知りたいという人や方法を忘れてしまったという人に対して簡潔にまとめていきます。

ループを使用する際はリストだけでなく辞書もループで展開したい場面があると思いますのでそれらも併せて解説していきます。

スポンサーリンク
目次

for文の使い方

まずは for 文の使い方について解説いたします。
なお、書き方はリストと辞書とでぞれぞれ異なるので両方の書き方について記載いたします。

リストに対する for 文の書き方

リストの場合はレスポンスでクライアントに渡したリスト変数に対して template ファイルにて以下のように書くことで for ループすることができます。

{% for 変数 in リスト %}
<p> {{変数}} </p>
{% endfor %}

重要なのは if 文と同様ですが、“{%” を使うことと構文の最後に “{% endfor %}とつけることです。
この書き方は VB 的なもので python の書き方とは異なるので注意が必要です。

また多次元リストの場合は普通に for 文を使う感覚でネストさせてやればすべて展開できるので書き方にさえ注意すれば直感的に使えると思います。

{% for 変数 in リスト %}
 {% for 変数2 in 変数 %}
 <p> {{変数2}} </p>

 {% endfor %}
{% endfor %}

辞書に対する for 文の書き方

辞書を for 文で展開する場合は、辞書の key と value をそれぞれ展開する必要があります。
その展開には python の書き方でもそうですが、 items で展開します。

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

上記のように key と value を items で展開することでそれぞれにアクセスすることができます。
list と同じように記述すると中身が取り出せないので覚えておくようにしてください。

for 文でのカウンタの表示の仕方、使い方

for 文を利用するときはカウンタを使いたい場面が良くあると思います。
例えば繰り返した回数によって html 要素の id に連番をつけたいときなど。

そんな時は forloop.counter という組み込みですでに定義されている変数を使うことで表示することができます。
表示の方法はいたって簡単で以下の通りです。

{% for 変数 in リスト %}
<p id=”{{ forloop.counter }}”> {{変数}} </p>
{% endfor %}

上記のようにするだけでカウンタを表示することができます。
forloop.counter では 1 からカウントされますが、 0 からのカウント番号が欲しい場合は {{ forloop.counter0 }} とすることで0から表示することができます。

for 文を入れ子にしたとき親ループのカウンタを表示したいとき

先ほど django の for 文では入れ子にすることができることを紹介しました。
となると入れ子内で親のループ番号を取得したいときどうしたらいいのだろうという疑問を持つことがあると思います。

python で書くと以下の場合の子ループ内での変数 i へのアクセス方法ですね。

for i in range(5):
for j in range(5):
print( i )

このような場合 django の template では以下のようにすることでアクセスすることができます。

{% for 変数 in リスト %}
 {% for 変数2 in 変数 %}
 <p>
{{ forloop.parentloop }} </p>
 {% endfor %}
{% endfor %}

forloopparentloop を使うことで親ループのカウント番号 (forloop.parentloop)を表示することができます。

また forloop には親ループのカウント番号を表示する以外にいくつか使い道があるのでいかにまとめておきます。

変数名説明
forloop.counter1 からのカウント番号を表示
forloop.counter00 からのカウント番号を表示
forloop.revcounter逆順にしたカウント番号を表示
forloop.revcounter0逆順にカウントし0までの番号を表示
forloop.firstループの先頭であれば True を表示、それ以外は False
forloop.lastループの末尾であれば True を表示、それ以外は False
forloop.parentloop親のカウント番号を表示

いかがでしょうか。
ループは使用する機会が必ずあるので、書き方は覚えるようにすると素早くかけて良いと思います。

今回はここまでです。
お疲れ様でした。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

本業ではPHPを使ったWEBアプリやJavaを使用した基幹アプリを作成しております。Pythonは個人的に勉強しており、E資格を取ったりしたおかげで、業務でAIの研究とかも任されるようになりました。学習のアウトプットのために本サイトを運営しておりますが、これからPythonを学ぶという人のお役に立てればいいなと思います。わからないことや調査して記事にしてほしいことがございましたらご連絡いただけると幸いです。

コメント

コメントする

目次
閉じる