Djangoのテンプレートでobjectsに配列が入っていた時、N番目の要素を取得する方法をご紹介します。
普通は配列を1つずつ取り出して、要素にアクセスします。
template.html
{{ for object in objects }}
{{object.name}}
{{ endfor }}
こちらの例ではobjects配列を一つずつobjectとして取り出しています。
objectに対してnameというフィールドが用意されていればnameに保存されている値が出力されています。
nameが異なる内容だったり、リスト表示するときにはこれでいいのですが、リスト外で利用する時に1つの値を表示するためにfor を使うのは手間です。
そこで、特定の要素を取り出すためには下記の様にインデクス番号を指定します。
template.html
{{ objects.0 }}
これで指定した番号の配列にアクセスできます。
Pythonで配列にアクセスする場合は
template.html
と書きますが、Djangoの“テンプレート”でこれは利用できないので
objects[0]
.インデックス番号
と覚えておきましょう。
テンプレートのobjectsを他の変数名にする方法
何気なくobjects
を使っている方も多いと思いますが、この変数名は変更できます。
GenericViewの場合context_object_name
で指定した名前に変更できます。
views.py
class PostListView(ListView):
model = Post
template_name = 'post/list.html'
context_object_name = 'posts'
変数名を変更すると
template.html
{{ for post in posts }}
{{post.name}}
{{ endfor }}
このように書けるのでobjects
のときよりプログラムが読みやすくなります。
この記事を読んでくれている方はきっとDjangoでページネーション(ページ送り)の仕方も知りたくなることがこの先出てくることでしょう。ページ送りの設定方法を知りたい方はこちらをご参考ください。
コメントを残す