Viewの継承
Viewの継承
Djangoが提唱しているViewの特徴の一つにViewの継承があります。
Viewの継承を使用すると同じコードを書く量を圧倒的に減らすことができます。
Viewのベースとして使用する
Viewの継承を行うケースはいくつかあります。
例えばページは違うがフロントエンドに投げるデータが同じ場合、以下のように記述することができます。
views.py
from django.views.generic import TemplateView
from .models import Article
ArticleListViewBase(TemplateView):
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
articles = Article.objects.all().order_by('created')
context['articles'] = articles
return context
IndexView(ArticleListViewBase):
template_name = 'index.html'
index = IndexView.as_view()
ArticleListView(ArticleListViewBase):
template_name = 'article/list.html'
article_list = ArticleListView.as_view()
2ページ分のViewを書いていますがかなりコードがスッキリしたのがわかるでしょうか?
indexにもarticle_listにも同じArticleのデータを投げる場合、まずは継承元となるViewを記述します。
そしてこのViewにget_context_data
を記述して、データをフロントエンドに投げる処理を記述しています。
indexとarticle_listでは、このViewを継承するためにclassの引数に指定しています。
そして、template_nameを記述しているだけ。
たったこれだけで2ページ分のViewを作成することができました。
これなら仮にViewに変更が加わっても一箇所変更するだけで、機能の更新が可能です。
Viewの継承は、Pythonのクラス継承機能を用いています。
つまり、Viewに関係のない処理が発生する場合は、単純なPythonのクラスを記述して継承することが可能です。
getやpost、get_context_dataなどViewに依存する機能の場合は、同じようにクラスを継承して、Viewを継承することでコードを綺麗にまとめることができます。
ぜひ覚えておきましょう。
Just Python フリープラン
ジャスパイなら教材は全て無料!