之前這筆記都是使用FBV(Function Based Views),以下與CBV(Class Based Views)做對照:
#FBC
def index(request):
return render(request, 'index.html')
#CBV
class IndexView(TemplateView):
template_name = 'index.html'
快速體驗CBV
# views.py
#FBC
def index(request):
return render(request, 'index.html')
#CBV
class IndexView(TemplateView):
template_name = 'index.html'
快速體驗CBV
# views.py
from django.views.generic import View
class CBView(View):
def get(self, request):
return HttpResponse('Class Based View are Cool!')
# urls.py
from basic_app import views
url(r'^$', views.CBView.as_view()),
TemplateView應用
from django.views.generic import TemplateView
context = super(IndexView, self).get_context_data(**kwargs)
context['injectme'] = 'Basic Injection!'
return context
#urls.py
url(r'^$', views.IndexView.as_view()),
from django.views.generic import ListView
class SchoolListView(ListView):
context_object_name = 'schools' # 沒有使用context_object_name django將預設成 school_list
model = models.School
DetailView應用
class SchoolDetailView(DetailView):
context_object_name = 'school_detail' # 未設定
model = models.School
template_name = 'basic_app/school_detail.html'
CreateView應用
class SchoolCreateView(CreateView):
fields = ('name', 'principal', 'location')
model = models.School
之後要記得去School Model 加上get_absolute_url設定轉換的頁面
url(r'^create/$', views.SchoolCreateView.as_view(), name='create'),
UpdateView應用
class SchoolUpdateView(UpdateView):
fields = ('name','principal')
model = models.School
url(r'^update/(?P<pk>\d+)/$', views.SchoolUpdateView.as_view(),name='update'),
DeleteView應用
TemplateView應用
from django.views.generic import TemplateView
# views.py
class IndexView(TemplateView):
template_name = 'index.html'
# for injection
def get_context_data(self,**kwargs): # 雙*代表字典,單*代表Tupletemplate_name = 'index.html'
# for injection
context = super(IndexView, self).get_context_data(**kwargs)
context['injectme'] = 'Basic Injection!'
return context
url(r'^$', views.IndexView.as_view()),
ListView應用
from django.views.generic import ListView
class SchoolListView(ListView):
context_object_name = 'schools' # 沒有使用context_object_name django將預設成 school_list
model = models.School
DetailView應用
from django.views.generic import DetailView
class SchoolDetailView(DetailView):
context_object_name = 'school_detail' # 未設定
model = models.School
template_name = 'basic_app/school_detail.html'
url(r'^(?P<pk>\d+)/$', views.SchoolDetailView.as_view(),name='detail'),
CreateView應用
class SchoolCreateView(CreateView):
fields = ('name', 'principal', 'location')
model = models.School
之後要記得去School Model 加上get_absolute_url設定轉換的頁面
url(r'^create/$', views.SchoolCreateView.as_view(), name='create'),
UpdateView應用
class SchoolUpdateView(UpdateView):
fields = ('name','principal')
model = models.School
url(r'^update/(?P<pk>\d+)/$', views.SchoolUpdateView.as_view(),name='update'),
DeleteView應用
沒有留言:
張貼留言