テンプレートのインデックス、あとforループで爆死した話

おれがアホやった

こんな感じのよくあるテンプレートかいた

<ul>
  {% for book in books %}
    <li/>{{ book.title}}
    <li/>{{ book.author }}
  {% endfor %}
</ul>

で、こんなエラーがでた

Caught TypeError while rendering: 'Book' object is not iterable

え、なんでって思ってたらおれはこう書いていた

<ul>
  {% for book in books %}
    <li/>{{ book.title}}
    <li/>{{ book.author }}
    {% for hoge in book %}
      {{ hoge }}
    {% endfor %}
  {% endfor %}
</ul>

つまり iterable な books は QuerySet でわたしたからいいけれど、それの擬似コード内でさらにループさせようとしてたからこういうエラーがでた。擬似コードかいてて実際はもうちょい複雑だったから気づけなかった。

テンプレートのインデキシングが便利

上記の例だと

<ul>
  {{ books.2.title }}
  {{ books.2.author }}
</ul>

みたいにして books という iterable なオブジェクトに対してインデキシングでアクセスできる。諸事情によりテンプレート内で必要だったので助かった

追記

実はこの件いらなくなったんや……