Django 一覧画面と詳細画面の作成

初めに

前回に続いて本棚アプリケーションの作成を行いました。今回は一覧画面と詳細画面を作成しました。
これに対して行った具体的な手順をまとめます。
nissin-geppox.hatenablog.com

概要

  • 一覧画面の設定
  • 一覧画面のhtmlの作成
  • 詳細画面の設定
  • 詳細画面のhtmlの作成

一覧画面の設定

まず、一覧画面にアクセスするためのルーティング設定を行いました。
ルーティング設定としてurls.pyに以下のようなコードを追加しました。

from django.urls import path

from . import views

urlpatterns = [
  path('book/', views.ListBookView.as_view())
]

次に、以下のようにviews.pyに一覧表示用のclassを作成しました。

from django.shortcuts import render
from django.views.generic import ListView
from .models import Book


class ListBookView(ListView):
  template_name = 'book/book_list.html'
  model = Book

一覧画面のhtmlの作成

一覧画面用のhtmlファイルを作成しました。
まず、以下のコマンドよりhtml用のディレクトリとhtmlファイルを生成しました。

$ cd book
$ mkdir templates
$ cd templates
$ mkdir book
$ cd book
$ touch book_list.html

続いて、生成したbook_list.htmlに以下のコードを追加しました。

{% for item in object_list %}
<ul>
  <li>{{ item.title }}</li>
  <li>{{ item.text }}</li>
  <li>{{ item.category }}</li>
</ul>
{% endfor %}

最後に、以下のコマンドよりサーバーを起動し、作成したhtmlファイルが表示されるかどうかを確認しました。

$ python3 manage.py runserver

ページは以下のように表示されました。

上の画像より正しく表示されることを確認することができました。

詳細画面の設定

まず、詳細画面にアクセスするためのルーティング設定を行いました。
ルーティング設定としてurls.pyに以下のようなコードを追加しました。

from django.urls import path

from . import views

urlpatterns = [
  path('book/', views.ListBookView.as_view()),
  path('book/<int:pk>/detail/', views.DetailBookView.as_view()),
]

次に、以下のようにviews.pyに詳細画面用のclassを作成しました。

from django.shortcuts import render
from django.views.generic import ListView, DetailView
from .models import Book


class ListBookView(ListView):
  template_name = 'book/book_list.html'
  model = Book

class DetailBookView(DetailView):
  template_name = 'book/book_detail.html'
  model = Book

詳細画面のhtmlの作成

詳細画面のhtmlファイルを作成しました。
まず、以下のコマンドよりhtmlファイルを生成しました。

$ touch book/templates/book/book_detail.html

続いて、生成したbook_detail.htmlに以下のコードを追加しました。

{{ object.category }}
{{ object.title }}
{{ object.text }}

最後に、サーバーを起動し、URLからidが2の記事を指定し、作成したhtmlファイルが表示されるかどうかを確認しました。
ページは以下のように表示されました。

上の画像より、idを設定することにより、指定した記事のみを表示することができました。