[Django]テンプレートでobjectsの配列番号を指定する方法

Djangoテンプレート配列番号

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

objects[0]
と書きますが、Djangoの“テンプレート”でこれは利用できないので .インデックス番号 と覚えておきましょう。

 

テンプレートの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でページネーション(ページ送り)の仕方も知りたくなることがこの先出てくることでしょう。ページ送りの設定方法を知りたい方はこちらをご参考ください。

【Django】Generic.ListViewでページネーション(ページ送り)する方法

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください