Djangoのテンプレートで奇数・偶数判定
縞模様の表を作るときに、ループ番号の奇数・偶数判定が必要になりますよね。PHPだと直接コードを書けるので何の問題もないのですが、Djangoだとそうはいかないので、タグ、あるいはフィルタの自作をすることになってしまいます。もともとそういう風にDjangoは設計されているのかもしれないのですが、面倒くさいので何か方法はないかと考えて、こんな感じで実装してみました。
<table> <tbody> {% for item in list %} <tr class="{{ forloop.counter|divisibleby:2|yesno:'even,odd' }}"> <td>{{ item }}</td> </tr> {% endfor %} </tbody> </table>
「forloop」というのは自動的に生成される変数で、その「counter」属性が1から始まるループ番号です。他にもfirstとかlastとか・・・。
で、「divisibleby」が値を引数で割りきれる場合にTrueを返してくれるフィルタなので、「forloop.count」に対してこのフィルタを掛ければ、偶数の場合はTrue、奇数の場合はFalseが出力されることになります。後は、「yesno」フィルタで、Trueの場合、Falseの場合に出力する文字列を指定してやればOKです。