Django 関数ベースビューからクラスベースビューへの変更
今時Djangoのビューはクラスを使って定義するのが主流で、自作サイトも関数ベースからクラスベースに変更したのでその違いがわかるように併記しておこうと思います。
以下イタリック箇所は個々人で異なります。
関数ベースビューのコード
views.py
from django.template.response import TemplateResponse
from . import models
def home(request):
context = {'articles': models.Articles.objects.all()[:5]}
return TemplateResponse(request, 'home.html', context=context)
urls.py
from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.home, name='home'), ]
クラスベースビューのコード
views.py
from django.views.generic import TemplateView #テンプレートビュー以外にも様々な汎用ビューがある。 from . import models class Home(TemplateView): template_name = "home.html" #テンプレート名を指定している。TemplateViewでは必須。 def get_context_data(self, **kwargs): #基本的には親メソッドをオーバーライドして独自処理を追加する。 context = super(Home, self).get_context_data(**kwargs) context['articles'] = models.Articles.objects.all()[:5] return context
urls.py
from django.conf.urls import url from app_ttb.views import Home urlpatterns = [ url(r'^$', Home.as_view(), name='home'), #as_view()でビューと紐づける。 ]