目録
配列の各要素や辞書の各キーを指定して値を取り出す
2023-02-28
はじめに
views.py
のindex
関数からcontext
を通してcountry_list
、country_tuple
、country_dict
をindex.html
に送るとする。
def index (request):
country_list = [ 'US', 'IN', 'UA', 'GB', 'AU', 'TW', 'CN', 'JP', 'NZ']
country_tuple = [ 'USA', 'IND', 'UKR', 'GBR', 'AUS', 'TWN', 'CHN', 'JPN', 'NZL']
country_dict = {
'840': 'United States of America', '356': 'India', '804': 'Ukraine',
'826': 'United Kingdom of Great Britain and Northern Ireland',
'036': 'Australia', '158': 'Taiwan, Province of China',
'156': 'China', '392': 'Japan', '554': 'New Zealand',
}
context = {
'country_list' : country_list,
'country_tuple': country_tuple ,
'country_dict': country_dict ,
}
return render(request, 'index.html' , context)
リストやタプルの場合
分かれば単純で、アクセスしたい要素の番号が2だとしたら
<!DOCTYPE html >
<html lang ="ja" >
<head>
<meta charset ="UTF-8" >
<title>Web ページ </title>
</head>
<body>
<div> list: {{ country_list. 2 }} </div>
<div> tuple: {{ country_tuple. 2 }} </div>
</body>
</html>
とすれば良くて、ドットメソッドのように呼び出すことができる。インデックスは0以上を指定する。
辞書の場合
勘のいい人は気付いたかもしれない。配列のインデックス番号をメソッドのように呼び出せる。もしかして辞書のキーをメソッドとして扱えば良いのでは?
全くその通りで
とすれば各キーの値を取得できる。もし指定したキーがない場合何も返ってこない。
入れ子の場合
入れ子構造の場合ドット「 . 」で繋いでいくだけで良い。リストのリスト、リストの中に辞書、辞書の値にタプルでも順に指定すれば値を取得できる。
country_nest = {
'US': ( 'USA', [ '840', 'United States of America']) ,
'IN': ( 'IND', [ '356', 'India']) ,
'UA': ( 'UKR', [ '804', 'Ukraine']) ,
'GB': ( 'GBR', [ '826', 'United Kingdom of Great Britain and Northern Ireland']) ,
'AU': ( 'AUS', [ '036', 'Australia']) ,
'TW': ( 'TWN', [ '158', 'Taiwan, Province of China']) ,
'JP': ( 'JPN', [ '392', 'Japan']) ,
'NZ': ( 'NZL', [ '554', 'New Zealand'])}
上記のような複雑な入れ子構造があってもメソッドチェーンのように順に「 . 」を使えば値を取得できる。
他にもリストの中にタプルがあるchoices
を用意してfor文で回したとき、タプルの値を展開して表示することができる。
choices = [
( 'US', 'United States of America') ,
( 'IN', 'India') , ( 'UA', 'Ukraine') ,
( 'GB', 'United Kingdom of Great Britain and Northern Ireland') ,
( 'AU', 'Australia') , ( 'TW', 'Taiwan, Province of China') ,
( 'CN', 'China') , ( 'JP', 'Japan') , ( 'NZ', 'New Zealand')
]
{% for choice in choices %}
<div> {{ choice .0 }} - {{ choice .1 }}</div>
{% endfor %}