- テンプレートでビューから渡された変数を表示する
- リスト型の変数のインデックスを指定して一部を表示
- リスト型の変数をループさせる
- 辞書型の変数のキーを指定して表示
- 辞書型の変数をitemsメソッドでループさせキーと値を取り出す
など、Djangoのテンプレートの使い方について、詳細に解説しています。
Djangoのビューからテンプレートに値を渡す方法
以前の記事でテンプレートファイルの配置先ディレクトリとURLマッピングについて記載したが、今回はビューで作成した変数をテンプレートファイルに渡して表示する方法を説明する。
ビューに文字列、数値を渡す場合にはrenderでcontext=として記載する。
(TEMPLATE_DIRの設定はこちら)
1: 文字列、数値型をテンプレートに渡して表示
- views.pyに記述する内容
def index(request):
name = 'Taro'
age = 20
return render(request, 'firstapp/index.html', context={
'var_name': name, # 変数name(Taro)の値をvar_nameという名前でテンプレートに送る
'var_age': age,# 変数age(20)の値をvar_nameという名前でテンプレートに送る
}
)
#TEMPLATE_DIR/firstapp/index.htmlを表示する。contextに設定した変数を値をtemplateに渡す。
- TEMPLATE_DIR/firstapp/index.htmlでviews.pyから渡された値を表示する。
<html>
<head>
<meta charset="utf-8">
<title>First App</title>
</head>
<body>
name: {{ var_name }}, age: {{ var_age }}
</body>
</html>
djangoを起動して、urlでアクセスすると以下のように表示される。
2: リスト型をテンプレートに渡して表示
リスト型でもテンプレートに値を渡して表示することができる。
- views.pyに記述する内容
def index(request):
fruits = ['apple', 'lemon', 'grape']# リストでfruits変数を作成
return render(request, 'index.html', context={
'fruits': fruits, # リスト型のfruitsをテンプレートに送る
})
次に、テンプレートで以下のように表示する。
- index.htmlに記述する内容
{{ fruits.1 }} <!-- indexが1の値(lemon)が表示される-->
{% for fruit in fruits %} <!-- リストをループさせる -->
<p>{{ fruit }}</p> <!-- リストの中身を1つずつ表示する -->
{% endfor %}
3: 辞書型をテンプレートに渡して表示
辞書型でもテンプレートに値を渡して表示することができる。
.キー名として、辞書型の各値にキーを指定してアクセスすることができる。
また、ループ文とitemsメソッドを用いることで、キーとバリューをそれぞれ取り出して表示することもできる。
- views.pyに記述する内容
def index(request):
user = { # 辞書型で変数を定義する
'name': 'Taro',
'age': 20,
}
return render(request, 'index.html', context={
'user': user, # 辞書型の変数を渡す
})
- index.htmlに記述する内容
{{ user.age }}<!-- userのageにアクセス(20と表示) -->
{% for key, value in user.items %} <!-- userをループして、キーとバリューをkey, valueに入れる -->
<p>{{key}} - {{value}}</p><!-- name - Taro, age - 20を表示 -->
{% endfor %}
{% if 'name' in user %}<!-- キーnameがuserに存在するかどうか -->
<p>nameはuserに存在します</p>
{% endif %}