【Django】ジェネリックビューについて

ジェネリックビューとは、指定したモデルの全レコードを取り出したり、特定のIDのものだけを取り出すといった基本的な機能を持った規定のビュークラスです。
ジェネリックビューの代表的なものとして「ListView」「DetailView」の2つをとりあげます。

ListViewについて

ListViewは指定モデルの全レコードを取り出すためのジェネリックビューです。
以下のような形で作成します。

from django.views.generic import ListView

class クラス名(ListView):
  model = モデル

DetailViewについて

DetailViewは特定のレコードを取り出すためのジェネリックビューです。
以下のような形で作成します。

from django.views.generic import DetailView

class クラス名(DetailView):
  model = モデル

Contactをジェネリックビューで表示する

views.pyにジェネリックビューを追加します。
hello/views.py

from django.views.generic import ListView
from django.views.generic import DetailView

class ContactList(ListView):
  model = Friend

class ContactDetail(DetailView):
  model = Friend

urls.pyにurlpatternsを登録します。
hello.urls.py

from django.urls import path
from . import views
from .views import ContactList  #追加
from .views import ContactDetail #追加

urlpatterns = [
  path('', views.index, name='index'),
  path('create', views.create, name='create'),
  path('edit/<int:num>', views.edit, name='edit'),
  path('delete/<int:num>', views.delete, name='delete'),
  path('list', ContactList.as_view()), #追加
  path('detail/<int:pk>', ContactDetail.as_view()), #追加
]

contact_list.htmlの作成
hello/templates/hello/contact_list.html

{% load static %}
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>{{title}}</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.css" 
  rel="stylesheet" crossorigin="anonymous">
</head>
<body class="container">
  <h1 class="display-4 text-primary">
    Friends List</h1>
  <table class="table">
    <tr>
      <th>id</th>
      <th>name</th>
      <th></th>
    </tr>
  {% for item in object_list %}
    <tr>
      <th>{{item.id}}</th>
      <td>{{item.name}}</td>
      <td><a href="/hello/detail/{{item.id}}">detail</a></td>
    <tr>
  {% endfor %}
  </table>
</body>
</html>

contact_detail.htmlの作成
hello/templates/hello/contact_detail.html

{% load static %}
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>{{title}}</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap/dist/css/bootstrap.css" 
  rel="stylesheet" crossorigin="anonymous">
</head>
<body class="container">
  <h1 class="display-4 text-primary">
    Friends List</h1>
  <table class="table">
    <tr>
      <th>id</th>
      <th>name</th>
      <th></th>
    </tr>
  {% for item in object_list %}
    <tr>
      <th>{{item.id}}</th>
      <td>{{item.name}}</td>
      <td><a href="/hello/detail/{{item.id}}">detail</a></td>
    <tr>
  {% endfor %}
  </table>
</body>
</html>

webブラウザにてアクセスします。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

関連記事

コメント

この記事へのコメントはありません。