詳細ビューの作成

インデックスビュー以外にもビューを作成してみましょう.ここで,本の詳細を表示する詳細ビューを作成することにします.といっても,今回は本のIDのみを表示するだけです.rsl_opac/views.pyに以下のようにDetailViewクラスに関するコードを追加してください.

DetailViewクラスが呼び出されるように,rsl_opac/urls.pyurlpatternsにもパスを追加します.

ブラウザで下記のURLにアクセスしてみてください.
http://localhost:8000/rsl_opac/5/detail/
http://localhost:8000/rsl_opac/12/detail/

それぞれ,「本(book_id=5)の詳細ページです.」,「本(book_id=12)の詳細ページです.」と表示されました.

追加したpath()関数の第1引数には'<int:book_id>/detail/'というURLパターンが記述されています.例えば,http://localhost:8000/rsl_opac/5/detail/にアクセスされると,前回説明したとおり,rsl_opac/の部分までを取り除いたうえで,rsl_opac/urls.pyurlpatternsとマッチングしていきます.残ったURLは,5/detail/ですので,これとURLパターンを比較することになります.<int:book_id>は整数型のクエリパラメタbook_idを指します.5/detail/のうち5の部分が<int:book_id>の部分にマッチします.結果的に,5/detail/'<int:book_id>/detail/'というURLパターンに一致しますので,第2引数のviews.detailが呼ばれます.

IndexViewのときと同様に,DetailViewクラスのget()メソッドが呼ばれます.ただし,DetailView.get()メソッドには,book_idという引数が追加されています.これは,先に説明したクエリパラメタbook_idに対応する引数です.このbookidを使って,HttpResponse("本(book_id=%s)の詳細ページです." % book_id)という形で,book_idの値が画面に表示されるようにしています.

URLのマッチングについては下記に文献[1]を参照してください.


参考

  1. はじめての Django アプリ作成、その 3 | Django ドキュメント | Django # もっとビューを書いてみる