DjangoでCBVを使っていない

CBVとは

Class-based Viewのことで、Viewに関するクラスがDjangoにはあり、それを継承して書いていくやり方です。

docs.djangoproject.com

一覧を表示するためのListView、詳細画面のDetailViewなどWebアプリケーションでよく使うパターンが、クラスとして提供されています。

CBVのメリット

CBVを利用することでショートカットでき、必要な実装に集中できます。

特にListViewなどはページネーションがビルドインされているため、対象なるQuerySetを入れるだけでページネーションが動作します。

なぜCBVを使わないのか

ListViewやDetailViewなどのCBVの種類や、それぞれが提供している機能が覚えられないからです。

Djangoに入門したてのころは「CBVでやらなくては!」という脅迫観念があり

ccbv.co.uk

などを勉強していましたが、今は後述のFBVをメインに書いています。

何を使っているのか

関数を定義して、それをurls.pyに定義しています。いわゆる Functional-Based View (FBV)です

# views.py
def home(request):
     return render("home.index", context={})

# urls.py
from django.urls import path
from .views import home

urlpatterns = [
   path("/", home)
]

FBVのデメリット

記述がCBVに比べて、冗長になりがちです。

FBVを書くきっかけ

spookylukey.github.io

というサイトのがきっかけでした。

あわせてhtmx のようなHTMLの一部分だけを返すライブラリをDjangoと併用することが多くなり、FBVなら自由書けることも理由の一つです。

DjangoはCBVを使いこなせないと…」となっている方がいらしたら、そんなこともないよ。と伝えられるといいなと思って書きました。