【Django初学者向け】単純明快!クラスベースビュー「DetailView」の書き方・基本を徹底解説!

DetailViewDjango

(最終更新月:2021年11月)

「詳細ページのコードを短くしたい!」

「クラスベースビューで詳細ページを作りたい!」

というDjango初学者の方向けの記事になります

当記事を通じて、

  • クラスベースビュー 「DetailView」の書き方
  • 実例コード
  • DetailViewでよく使うメソッド

を解説・紹介していきます

別記事で作成したview関数「nippoDetailView」と同じものをクラスベースビューで作成してきます

def nippoDetailView(request, pk):
     template_name = "nippo/nippo-detail.html"
     ctx = {}
     q = get_object_or_404(NippoModel, pk=pk)
     ctx["object"] = q
     return render(request, template_name, ctx)

DetailViewの書き方

DetailViewクラスの記述は、3ステップで完了します

  1. DetailViewクラスのインポート
  2. DetailViewクラスの継承
  3. 「template_name」「model」変数へ値を格納

この3ステップさえ守れば、

  • ブラウザから「pk」を受け取る
  • データベースから「pk」が一致するデータを取り出す
  • コンテキストとしてHTMLテンプレートへ渡す

ことが自動的に行われます

【実例】コードの紹介

早速クラスベースビュー「DetailView」を継承した「NippoDetailView」のコードをご覧ください

from django.views.generic import DetailView

class NippoDetailView(DetailView):
    template_name = "nippo/nippo-detail.html"
    model = NippoModel

1,2,3ステップで完了です!

ファンクションビューで必要でした、

  • pkの受け取りの記述がいらない
  • contextへオブジェクトを渡す必要がない

という特徴がありますので覚えておきましょう!

また、備わっているメソッドもあり、

「任意の値をコンテキストとして渡したい!」

という「get_context_data」をご紹介します

任意の値をコンテキストで渡す「get_context_dataメソッド」

get_context_dataメソッドでは、

返された値がコンテキストとしてHTMLテンプレートへ渡されます

※ListViewなどほかのクラスベースビューでも使用できるメソッドになります

コード例

使用する機会があるかないかは置いといて、「site_name」という変数に「itc.tokyo」というコンテキストを渡してみます

def get_context_data(self):
        ctx = super().get_context_data()
        ctx["site_name"] = "itc.tokyo"
        return ctx

ポイント

DetailViewでは、自動的に「object」などのコンテキストが用意されていますので、スーパークラスからコンテキストを引き継ぐことを忘れないようにしましょう!

ctx = super().get_context_data()

引き継いだうえで、好きな値をコンテキストで渡していきます

まとめ

DetailViewは他のクラスベースビューに比べて非常にシンプルです

とは言いましても、メソッドの用意はget_context_dataに限りません

詳しくはソースコードにて研究してみてください

次回は、データベースへの保存を担う「クリエイトビュー」の解説を通じて、FormViewの基本についての記事となります

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!
タイトルとURLをコピーしました