Python入門 Djangoの使い方(その10)テンプレートの制御文(繰り返し処理)
はじめに
不定期連載のPython入門第24回目です。今回もPythonのWebフレームワーク「Django」を使っていきましょう。PythonのWebフレームワークといえばFlaskやPyramidなどもありますが、最も使われているのはDjangoです。今回はDjangoのテンプレート内での繰り返し処理の記述を学習していきます。それでは早速はじめましょう。
今回の内容:
テンプレートでのfor文の記述。
前提条件:
- Pythonバージョン:Python3
- Djangoバージョン:Django1.10.5
- 実行環境:Windows8
- ツール:VisualStudioCommunity2015
Djangoテンプレート内でのfor文サンプル
まずはシンプルな「for」文でリストの一覧を表示
1 | 'params' : [ "グー" , "チョキ" , "パー" ] |
上記リストを作成した場合、以下のように記述できます。
1 2 3 | { % for p in params % } {{ p }} { % endfor % } |
次にタプルの一覧を表示
1 | 'params' : ( "グー" , "チョキ" , "パー" ) |
上記タプルを作成した場合も、リスト同様に以下のように記述できます。
1 2 3 | { % for p in params % } {{ p }} { % endfor % } |
次に辞書の一覧を表示
1 | 'params' :{ "a" : "apple" , "b" : "banana" , "c" : "cherry" } |
上記辞書を作成した場合、以下のように記述できます。
辞書はキーと値があるために、変数を2つ用意します。
1 2 3 | { % for k,v in params.items % } {{ k }}{{ v }}<br> { % endfor % } |
ここまでが基本のループ文ですね。
では次に少し応用バージョンを見ていきましょう。
リストの中身がない場合に別のメッセージを表示
1 2 3 4 5 | { % for p in params % } {{ p }} { % empty % } params is empty. { % endfor % } |
→paramsが空、未定義の場合、「params is empty」が表示されます。
リストの一部分を表示
sliceフィルタをつけることで、リストの一部を表示することができます。
1 2 3 | { % for param in params| slice : "2:4" % } {{ param }} { % endfor % } |
→リストのインデックスが2から3(4未満)まで表示されます。
1 2 3 | { % for param in params| slice : "2:" % } {{ param }} { % endfor % } |
→リストのインデックスが2以降が表示されます。
1 2 3 | { % for param in params| slice : ":4" % } {{ param }} { % endfor % } |
→リストのインデックスが4未満が表示されます。
1 2 3 | { % for param in params| slice : ":" % } {{ param }} { % endfor % } |
→リストが全部表示されます。
ループの最初だけ違う処理を行う。
1 2 3 4 5 6 7 | { % for param in params| slice : ":" % } { % if forloop.first % } This is first time. → {{ param }}<br> { % else % } {{ param }}<br> { % endif % } { % endfor % } |
→最初のループのときだけ、「This is first time. →」が表示されます。
ループの最後だけ違う処理を行う。
1 2 3 4 5 6 7 | { % for param in params| slice : ":" % } { % if forloop.last % } This is last time. → {{ param }}<br> { % else % } {{ param }}<br> { % endif % } { % endfor % } |
→最後のループのときだけ、「This is last time. →」が表示されます。
ループ内でループカウントを取得する。
1 2 3 4 5 | { % for param in params % } index:{{ loop.counter0 }} / count:{{ loop.counter }} / value:{{ param }}<br> { % endfor % } |
→「loop.counter0」が0からカウントアップするのでループするリストのインデックスとなる。
「loop.couter」は1からカウントアップするのでループした回数となる。
ループ内でループカウントの”逆”を取得する。
1 2 3 4 5 | { % for param in params % } index:{{ loop.revcounter0 }} / count:{{ loop.revcounter }} / value:{{ param }}<br> { % endfor % } |
→「loop.revcounter0」、「loop.revcouter」はそれぞれ「loop.counter0」、「loop.counter」の逆となる。
まとめ
今回はテンプレート内での繰り返し処理の制御構文を学習しました。DjangoではWhile文があるのか定かではありませんが、どうやらなさそうです。Pythonにはあるのですが。。ということで、繰り返し処理をテンプレート内で行い時にはfor文で書きましょう。上記に挙げたように「ある条件の時にはこの処理をする」といった記述もできますので、活用しましょう。