この記事では下記のような悩み
- djangoでobjects.all()で全部出力はできるけど、一つだけ出力もできる?
- テンプレート上にlist型や辞書型の要素一つだけ出力したい!
に対して、テンプレート上で要素を一つだけ出力する方法を紹介します。
djangoではviews.pyでrenderなどを使用してHTMLのテンプレート部分に変数を渡すことができます。
それはobjects.all()などで出力した変数だけではなく、list型やdict型も同様に出力できます。
ただ、objects.all()やlist型、辞書型は全ての値を出力させる場合が多いため
{% for ~ in %} 文などを使えば、すべての値を出すことができます。
では、反対にlist型や辞書型の中のたった一つだけの値を出してみる場合はどうでしょうか?
今回の記事では、list型や辞書型をテンプレートに渡した際に、要素を一つだけ出力する方法を紹介します。
list型や辞書型をviews.pyに準備
では、本題に入っていきます。
list型や辞書型をテンプレートに引き渡した際に要素を一つだけ取り出す方法です。
まず、テンプレートに引き渡すためには、views.pyにリストや辞書を定義する必要があります。
では、views.pyには以下のような定義をしてみます。
from django.shortcuts import render
def sample_page(request):
sample1 = [1, 2, 3]
sample2 =[ [4, 5, 6], [7, 8, 9] ]
sample3 = {'a':10 , 'b': [11, 12, [13, 14, 15]]}
context={
'sample1':sample1,
'sample2':sample2,
'sample3':sample3,
}
return render(request, ‘sample_page.html', context)
sample1ではリスト、sample2ではリストの中にリスト、sample3では辞書の中にリストを加えました。
では、ここからテンプレートでの作業に入ります。
list型や辞書型から要素を一つだけ出力
上記ではviews.pyで準備をしていきました。
具体的には、views.pyの中にリストや辞書の中にリストなどを用意しました。
ここからテンプレート上で要素をたった一つだけ出力していきます。
今回は、
- sample1 から1番目の要素「1」
- sample2 から1番目の要素の中の3番目の要素「6」
- sample3からキー ‘a’ の値
- sample3からキー ‘b’ の値から3番目の要素であるリストから更に3番目の要素
をそれぞれ出力していきます。
この場合のテンプレートの書き方は以下が必要となってきます。
#〜前略〜
{{sample1.0}}
{{sample2.0.2}}
{{sample3.a}}
{{sample3.b.2.2}}
#〜攻略〜
{ }の二重括弧で括ります。そして出力したい要素の一つを狙っていきます。
リスト型であれば、要素内で最初から何番目にあるか、数字を書いていきます。
辞書型であれば、キーを書いていきます。
この2つの条件によって、狙った通りの出力になります。(一応、出力結果の画像を貼り付けます。)

要素を一つのみ出力する まとめ
まとめです。要素を一つのみ出力するには以下のようにします。
リストの場合はドットと数字で表現 {{ sample.0 }} や{{ sample.0.2 }} のような形です。
listの中にlistが入っていても同じ形で書いて出力できます。
辞書の場合はドットと’キー’で表現 {{ sample.a }} や {{ sample.b }}などです。
また、辞書型の値がlist型であっても、リスト内の順番となる数字を入れれば、さらに細かな箇所まで出力できます。{{ sample.b.2.2 }}などです。
以上がlist型や辞書型の中のたった一つだけの値を出す方法の説明となります。
お付き合いいただきありがとうございます。
djangoをより学びたい場合の関連記事です。
djangoをレベル別で書籍を使用し、順序よく学びたい方におすすめの本を紹介している記事です。
djangoを初めて学ぶ初学の方や基礎を学び終えた初級の方
アプリを作った・作っている中級の方の3種のレベルに分けておすすめの本を紹介しています。
また、スクールで学び、転職などを目標とする場合はこちらの記事をおすすめします。
Web業界の成長はすごいものがあります。また、djangoを使っている大手も多いです。
djangoを学んでWeb業界へ参入するならスクールで学ぶのが一番の近道になります。