今までDetailViewを使用して実装していた箇所をカスマイズして、複数のkeyと値を自由にテンプレートへ渡せるように修正を行いました。
本記事はそのメモ書きとなります。
DetailViewの書き換え方
始めのDetailViewは次のように記述していました。
class DetailView(generic.DetailView):
model = Post
これを次のように書き換えると、上記と同じ動きをします。
def DetailView(request, **kwargs):
post = Post.objects.get(pk__iexact=kwargs["pk"])
context = {}
context["post"] = post
return render(request, 'app/post_detail.html', context)
こちらのcontextの[ ] に keyを、=の右側に値を設定すれば、複数のkeyと値を自由にテンプレートへ渡せるようになります。
記述例
def DetailView(request, **kwargs):
post = Post.objects.get(pk__iexact=kwargs["pk"])
context = {}
context["post"] = post
context["num_list"] = [1,2,3,4,5] # key_listにnumを値に1,2,3,4,5を設定
context["moji_list"] = ["a","b","c","d","e"] # keyにmoji_listを値にa,b,c,d,eを設定
return render(request, 'app/post_detail.html', context)
views.py 以外の設定
今回をviewを実装するにあたり、設定したその他のファイルをご紹介します。
post_list.html
<div>{{ post.title }}</div>
{% for num in num_list %}
<div>{{ num }}</div>
{% endif %}
{% for moji in moji_list %}
<div>{{ moji }}</div>
{% endif %}
models.py
from django.db import models
class Post(models.Model):
title = models.CharField('タイトル', max_length=255)
urls.py
from django.urls import path
from . import views
app_name = 'app'
urlpatterns = [
path('post/<pk>/',views.DetailView.as_view(), name='detail'),
]