スポンサーリンク

【Django】クラスベースビューで詳細画面を作成【ブログアプリ2】

スポンサーリンク
スポンサーリンク
この記事は約4分で読めます。

 

クラスベースビューでの詳細画面の作成について

前回はクラスベースビューを使ってブログ記事の新規作成画面を作成した。

今回はクラスベースビューを使って詳細画面を作成する。

 

前回:【Django】クラスベースビューとforms.pyで新規作成画面を作成【ブログアプリ2】

 

 

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

 

 

クラスベースビューでの詳細画面を作成する手順

 

urls.pyの編集

~デスクトップ/Blog2/app/urls.py

 

[1]views.pyからBlogDetailViewをインポート

BlogDetailViewは未作成なので、次の手順で作成する。

 

[2]新しいURLパターンを作成

利用者からのリクエストURLが以下と一致した場合に実行されるPath関数を追加した。

http://127.0.0.1:8000/app/detail/1
http://127.0.0.1:8000/app/detail/2

 

第一引数にある<int:pk>は、int型の引数pkを受け取ることを示している。

pkはprimary keyの略称。各ブログ記事のIDを指す。

第二引数でviews.pyのBlogDetailViewを.as_view()を使ってメソッドとして呼び出している。

第三引数ではこのURLパターンをdetailと名付けた。

 

 

views.pyの編集

~デスクトップ/Blog2/app/views.py

 

[1]DetailViewをインポート

DetailViewは汎用ビュークラス。

詳細画面を作成することに特化している。

 

[2]BlogDetailViewを作成

BlogDetailViewはDjangoの汎用ビュークラスであるDetailViewを継承している。

変数modelにBlogモデルを、template_nameにdetail.htmlのパスを、

context_object_nameにblogを入れて、Blogモデルを通じてDBから取得した1つのブログ記事のデータをhtmlファイルと一緒に利用者にレスポンスする。

DBからどの記事のデータを取得するかは、利用者がURLに含めてリクエストしてきたpk(ブログ記事のID)を、urls.pyで定義したpath関数から受け取って指定する。

 

 

detail.htmlの作成

~デスクトップ/Blog2/template/detail.html

 

 

{% block title %}{{ blog.title }}{% endblock %}

blog.titleのblogは、views.pyのBlogDetailViewクラスでcontext_object_nameに格納したblogという文字列がdetail.htmlに渡されており、このblogがブログ記事のオブジェクトとして扱うことができている。

blog.titleのtitleはmodels.pyで定義したBlogモデルのフィールド。

blogオブジェクトはBlogモデルのインスタンスなので、その属性であるtitleとcontentを扱うことができる。

ここでは、詳細画面のタイトルをブログ記事のタイトルとした。

 

<p> {{ blog.content }} </p>

blog.titleと同様に、ブログ記事の内容をblogオブジェクトのcontent属性を使ってhtmlのpタグで囲って表示している。

 

 

ディレクトリ構成の確認

現在のディレクトリ構成は以下の通り。

■ディレクトリ構成

urls.pyでは新しいURLパターンを作成した。

利用者からのリクエストのURLが以下と一致した場合に実行されるPath関数を追記している。

http://127.0.0.1:8000/app/detail/1

 

views.pyでは汎用ビュークラスのDetailViewを継承したBlogDetailViewを作成した。

 

detail.htmlではviews.pyのBlogDetailViewから受け取ったブログ記事の情報を表示している。

 

Django記事一覧

前回:【Django】クラスベースビューとforms.pyで新規作成画面を作成【ブログアプリ2】

次回:【Django】クラスベースビューで更新画面を作成【ブログアプリ2】

 

Django記事一覧

コメント