创建django应用程序时,我总是使用FBV(基于函数的视图),因为它非常易于处理。但是大多数开发人员表示,最好使用CBV(基于类的视图),而仅使用FBV,如果使用CBV很难实现的是复杂的视图。
为什么?使用CBV有什么优势?
最显着的优势是继承。在大型项目中,你可能会有很多相似的视图。不必一次又一次地编写相同的代码,只需让视图从基本视图继承即可。
django还附带了一组通用视图类,这些类可用于执行一些最常见的任务。例如,DetailView类用于从你的模型之一传递单个对象,使用模板进行渲染并返回http响应。你可以将其直接插入你的url conf ..
url(r'^author/(?P<pk>\d+)/$', DetailView.as_view(model=Author)),
或者你可以使用自定义功能扩展它
class SpecialDetailView(DetailView): model = Author def get_context_data(self, *args, **kwargs): context = super(SpecialDetailView, self).get_context_data(*args, **kwargs) context['books'] = Book.objects.filter(popular=True) return context
现在,你的模板将传递一个书本对象集合以进行渲染。