読者です 読者をやめる 読者になる 読者になる

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です。