django-基于类的视图

所有视图继承自View类,例如,RedirectView用于HTTP重定向,TemplateView扩展基类使它能渲染模板。

例如index首页--改成View类

改写前后urls.py------

前:

from django.urls import path
from . import views

app_name = ‘polls‘
urlpatterns = [
    path(‘‘, views.index, name=‘index‘)
]

后:

from django.urls import path
from . import views

app_name = ‘polls‘
urlpatterns = [
    path(‘‘, views.IndexView.as_view(), name=‘index‘)
]

改写前后Views.py----

前:

from django.shortcuts import render
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by(‘-pub_date‘)[:5]
    context = {‘latest_question_list‘: latest_question_list}
    return render(request, ‘polls/index.html‘, context)

后:

from django.views import generic

class IndexView(generic.ListView):
    template_name = ‘polls/index.html‘
    context_object_name = ‘latest_question_list‘

    def get_queryset(self):
        return Question.objects.filter().order_by(‘-pub_date‘)[:5]

也可以把IndexView里的属性写到urls.py中:任何传递到 <span>as_view()</span>  的参数将覆盖在类上设置的属性

path(‘‘, views.IndexView.as_view(template_name=‘polls/index.html‘), name=‘index‘),

1231