はじめに
ここでは、djangoのクラスベースビュー(汎用ビュー)の基本について解説していきます。
アプリケーションディレクトリ下にあるviews.py
に書いていきます。
モデルとしてmodels.py
のSampleModel
を、フォームとしてforms.py
のSampleForm
を利用するものとします。
TemplateView
最もシンプルな形のクラスビューです。
いろいろなページの作成に使えます。
from django.views import generic
class SampleTemplate(generic.TemplateView):
template_name = 'app/app_template.html'
なお、テンプレートとするHTMLファイルを指定するtemplate_name
は、アプリ名/アプリ名_view名.html
とすると、クラス定義時に明示しなくてもデフォルトで利用されるようになります。以下で説明する他のビューでも同様です。
ListView
ブログの記事一覧ページなど、複数のレコードを一覧表示するページに使えます。
from django.views import generic
from .model import SampleModel
class SampleList(generic.ListView):
model = SampleModel
template_name = 'app/app_list.html'
paginate_by = 10 # ページネーションを入れる場合
model
は、ページに表示するレコードを格納しているモデルを指定します。
CreateView
ブログの新規記事の作成など、新しいレコードを作成するページに使えます。
from django.urls import reverse_lazy
from django.views import generic
from .model import SampleModel
from .forms import SampleForm
class SampleCreate(generic.CreateView):
model = SampleModel
form_class = SampleForm
template_name = 'app/app_create.html'
success_url = reverse_lazy('app:app_list')
form_class
で指定されたフォームに基づいて、フォーム画面が作成されます。
また、success_url
は、記事作成に成功した後に遷移するページを指定します。詳しくはurls.py
の記事で解説します。
DetailView
ブログの記事の個別ページなど、レコードの詳細を表示するページに使えます。
from django.views import generic
from .model import SampleModel
from .forms import SampleForm
class SampleDetail(generic.Detail):
model = SampleModel
template_name = 'app/app_detail.html'
UpdateView
ブログの記事の編集画面など、一度作成したレコード内容を更新するページに使えます。
from django.urls import reverse_lazy
from django.views import generic
from .model import SampleModel
from .forms import SampleForm
class SampleUpdate(generic.UpdateView):
model = SampleModel
form_class = SampleForm
template_name = 'app/app_update.html'
success_url = reverse_lazy('app:app_list')
DeleteView
ブログの記事の削除画面など、作成したレコードを削除するページに使えます。
from django.urls import reverse_lazy
from django.views import generic
from .model import SampleModel
from .forms import SampleForm
class SampleDelete(generic.DeleteView):
model = SampleModel
template_name = 'app/app_delete.html'
success_url = reverse_lazy('app:app_list')
まとめ
ここでは、djangoのクラスベースビューの基本について解説しました。
次回は、関数ベースビューについて解説する予定です。