今回は django で template(テンプレート) ファイルでのループの方法についてわかりやすく解説していきます。
template ファイルでループを使用する場面はかなり多いと思いますので、すぐ知りたいという人や方法を忘れてしまったという人に対して簡潔にまとめていきます。
ループを使用する際はリストだけでなく辞書もループで展開したい場面があると思いますのでそれらも併せて解説していきます。
for文の使い方
まずは for 文の使い方について解説いたします。
なお、書き方はリストと辞書とでぞれぞれ異なるので両方の書き方について記載いたします。
リストに対する for 文の書き方
リストの場合はレスポンスでクライアントに渡したリスト変数に対して template ファイルにて以下のように書くことで for ループすることができます。
重要なのは if 文と同様ですが、“{%” を使うことと構文の最後に “{% endfor %} “とつけることです。
この書き方は VB 的なもので python の書き方とは異なるので注意が必要です。
また多次元リストの場合は普通に for 文を使う感覚でネストさせてやればすべて展開できるので書き方にさえ注意すれば直感的に使えると思います。
辞書に対する for 文の書き方
辞書を for 文で展開する場合は、辞書の key と value をそれぞれ展開する必要があります。
その展開には python の書き方でもそうですが、 items で展開します。
上記のように key と value を items で展開することでそれぞれにアクセスすることができます。
list と同じように記述すると中身が取り出せないので覚えておくようにしてください。
for 文でのカウンタの表示の仕方、使い方
for 文を利用するときはカウンタを使いたい場面が良くあると思います。
例えば繰り返した回数によって html 要素の id に連番をつけたいときなど。
そんな時は forloop.counter という組み込みですでに定義されている変数を使うことで表示することができます。
表示の方法はいたって簡単で以下の通りです。
上記のようにするだけでカウンタを表示することができます。
forloop.counter では 1 からカウントされますが、 0 からのカウント番号が欲しい場合は {{ forloop.counter0 }} とすることで0から表示することができます。
for 文を入れ子にしたとき親ループのカウンタを表示したいとき
先ほど django の for 文では入れ子にすることができることを紹介しました。
となると入れ子内で親のループ番号を取得したいときどうしたらいいのだろうという疑問を持つことがあると思います。
python で書くと以下の場合の子ループ内での変数 i へのアクセス方法ですね。
このような場合 django の template では以下のようにすることでアクセスすることができます。
forloop の parentloop を使うことで親ループのカウント番号 (forloop.parentloop)を表示することができます。
また forloop には親ループのカウント番号を表示する以外にいくつか使い道があるのでいかにまとめておきます。
変数名 | 説明 |
---|---|
forloop.counter | 1 からのカウント番号を表示 |
forloop.counter0 | 0 からのカウント番号を表示 |
forloop.revcounter | 逆順にしたカウント番号を表示 |
forloop.revcounter0 | 逆順にカウントし0までの番号を表示 |
forloop.first | ループの先頭であれば True を表示、それ以外は False |
forloop.last | ループの末尾であれば True を表示、それ以外は False |
forloop.parentloop | 親のカウント番号を表示 |
いかがでしょうか。
ループは使用する機会が必ずあるので、書き方は覚えるようにすると素早くかけて良いと思います。
今回はここまでです。
お疲れ様でした。
コメント