2021.07.10  

【Django】generic.DetailViewを書き換えてrenderする

Django,  Python    

今まで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'),
]


Djangoの参考書


参考にさせて頂いたサイト

再考:DetailViewの構造

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信