在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。 Django还提供了一种简单的方法来设置这些简单的视图被称为通用视图。
不同于传统的视图,一般的视图是一个类但没有函数。Django还提供了一组类 django.views.generic 通用视图,以及每一个普通视图是这些类或从它们中的一个类继承的。
有10+泛型类−
>>> import django.views.generic >>> dir(django.views.generic) ['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView', 'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView', 'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView', 'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 'detail', 'edit', 'list']
基于函数的视图的问题在于,虽然它们很好地覆盖了简单的情形,但是不能扩展或自定义它们,即使是一些简单的配置选项,这让它们在现实应用中受到很多限制。基于类的通用视图然后应运而生,目的与基于函数的通用视图一样,就是为了使得视图的开发更加容易。
下面三个是最常使用的基于类的通用视图:
TemplateView,ListView,DetailView
TemplateView
TemplateView
一般只在需要返回模板时使用。
class ProtectView(TemplateView):
template_name = 'polls/name.html'
TemplateView
可以方便的定义要返回的模板但它不能把数据库中的内容查询展示出来,所以需要使用 DetailView
和 ListView
。
所有基于类的通用视图中定义的方法需要在类视图调用
as_view()
方法后会被自动调用,因为 Django 的URL
解析器将请求和关联的参数发送给一个可调用的函数而不是一个类,所以基于类的视图有一个as_view()