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' #お好きな名前をどうぞ
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'),
]
ListViewの表示を確認する
下記コマンドからサーバーを立ち上げて表示を確認しましょう
http://127.0.0.1:8000/blog/
python manage.py runserver
参考文献
下記にListViewの公式ドキュメントのリンクとListViewに関連する記事を紹介しています
ぜひご参照ください
ListViewの公式ドキュメント
Generic display views | Django documentation
The web framework for perfectionists with deadlines.
ListViewで簡単にページ送りを実装する
【django】ListViewでページ送りを実装する方法 (paginate_by)
ページ送りとは,ページネーションと呼ばれ,複数の要素をページごとにわけて表示することです何も対策していないと,1ページにデータベースの中身全てを出力することに…
ページ内検索を簡単に実装する
【django】ページ内検索を実装する方法 (objects.filter)
ほとんどのwebサイトにはページ内検索できるようになっており,現代では必須項目となっています今回はListViewを活用して実装しますListViewの簡単な実装方法については…
お疲れ様でした
コメント