【django】ListViewでデータベースの中身を表示する方法

djangoのデータベースをうまく扱えないと悩んだことはないでしょうか?

djangoではListViewを用いることで簡単にデータベースを扱うことができます

本記事では,ListViewとは何かというところから,基本的な使い方などを解説します

目次

ListViewとは何か

公式には下記のように書かれています

オブジェクトのリストと、1つのオブジェクトに対する詳細ページの表示。

https://docs.djangoproject.com/ja/4.0/topics/class-based-views/generic-display/

djangoのClass-based viewの一種で,データベースの中にあるテーブル(オブジェクト)を表示することに長けたViewになります

Blogの内容の表示

今回はブログ記事を表示するような機能を考えます

記事数は6つ作ったのでそれを表示させます

ブログのモデルはこんな感じになってます

class Blog(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField(blank=True)
    updated_at = models.DateTimeField(auto_now=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

    class Meta:
        db_table = 'blogs'

ListViewの継承

views.pyでListViewを継承して,viewclassを作成します

from django.views.generic import ListView #追加
from .models import Blog #読み込みたいモデル

class BlogListView(ListView):
    model = Blog
    template_name = 'blog/blog.html' #表示したいHTML
    context_object_name = 'results' #お好きな名前をどうぞ

model
データベースのテーブル名

template_name
表示したいHTML

context_object_name
HTML上で扱うオブジェクト名

ListViewを表示するHTMLの作成

ListViewで指定したtemplate名でhtmlファイルを作成しましょう

templates
    blog
        base.html
        blog.html

オブジェクトの取り出し方はfor文です

{%%}の中にpythonの構文を記述して最後に{% endfor %}を記述してください

オブジェクトの各カラムは{{オブジェクト.カラム名}}で取り出せます

{% block main %}
    <div class="text-center mb-5">
        <h1 class="display-3 mb-5">はやてれおのBlog</h1>
        <p class="text-muted fs-3">Blogの記事一覧</p>
    </div>
    <div>
        {% for result in results %}
        <h4>{{ result.title }}</h4>
        <p>{{ result.created_at }}</p>
        <p class="lead">{{ result.content }}</p>
        {% endfor %}
    </div>
{% endblock %}

ListViewをurls.pyに追加する

urls.pyに追加して確認してみましょう

from django.urls import path
from .views import HomeTemplateView, ContactFormView, BlogListView #追加

urlpatterns = [
    path('', HomeTemplateView.as_view(), name='home'),
    path('blog/', BlogListView.as_view(), name='blog'), #追加
    path('contact/', ContactFormView.as_view(), name='contact'),
]

urlpatternsの全ての要素に最後,カンマがあるので忘れないようにしましょう

ListViewの表示を確認する

下記コマンドからサーバーを立ち上げて表示を確認しましょう

http://127.0.0.1:8000/blog/

python manage.py runserver
Listview

参考文献

下記にListViewの公式ドキュメントのリンクとListViewに関連する記事を紹介しています

ぜひご参照ください

ListViewの公式ドキュメント

ListViewで簡単にページ送りを実装する

ページ内検索を簡単に実装する

お疲れ様でした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次