通用视图DetailViewDetailView用于显示单个模型对象的数据。通常情况下,在URL中向视图提交对象的id,视图使用id获得模型对象,并将模型对象传递给模板。默认情况下,DetailView子类使用的模板文件名为"数据库模型名称_detail.html"在本例中使用的模型名称为user,所以默认的模板文件名称为user_detail.html在本例中项目名称为chapter5,Django默认在'/chapter5/chapter5/templates/chapter5/'目录中搜索user_detail.html文件举例:chapter5/chapter5/views.py文件from . import modelsfrom django.views.generic.detail import DetailViewfrom datetime import datetime#定义类继承DetailView类class useDetailView(DetailView): model=models.user #定义需要的模型(即数据库表对象) def get_context_data(self, **kwargs): #重载父类方法(该方法名固定:获取上下文) context=super().get_context_data(**kwargs) #显示的调用父类的的方法获取响应的报文,即数据库模型user对象数据 context["now"]=datetime.now() #向返回的模型(数据库表数据)的报文中添加额外的数据,最后将该模型对象传递给模板文件user_detail.html return context #自动调用模板user_detail.xml文件,来响应url请求 chapter5/chapter5/urls.py文件from django.contrib import adminfrom django.urls import pathfrom . import viewsfrom django.views.decorators.csrf import csrf_exempturlpatterns = [ path('admin/', admin.site.urls), path('test/<urldata>',views.showData), path('mytest404',views.mytest404), path('get/',views.showGetdata), path('str/',views.showSomething), path('down/',views.downLoad), path('csv/',views.writeCSV), path('pdf/',views.wirtePDF), path('json/',views.writeJSON), path('redirect/',views.useRedirect), path('usetem/',views.useTemplateResponse), path('usemodels/',views.useModels), path('pages',views.useModelsPaginator), #path('useview',views.MyviewName.as_view()), #MyviewName.as_view()才能如愿调用类视图 path('useview',csrf_exempt(views.MyviewName.as_view())), #MyviewName.as_view()才能如愿调用类视图,并取消csrf校验 path('usesubview',csrf_exempt(views.subMyviewName.as_view())), path('detail/<int:pk>',views.useDetailView.as_view()),]chapter5/chapter5/templates/chapter5/user_detail.html文件<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>使用内置的detail视图</title></head><body> 当前日期:{{now}} <(嗦牛子是什么意思?嗦牛子,指为男性口交。牛子在东北一些地区的方言中指阴茎,嗦牛子就是指口交。游戏解说周淑怡在一次直播中,读取粉丝发来的邮件时,有一个男粉丝说:周姐,我前几天听了你的课,和室友分手了。平时他晚上熄灯主动来嗦我牛子......(读到这里周淑怡已经笑崩了)而嗦牛子这个词也被大家顿时感悟了是什么意思。);br/> #now即为向DetailView子类中的模型对象添加的额外数据 <b>id:</b>{{object.id}}<br/> #object即为接收到DetailView子类传递来的模型对象 <b>name:</b>{{object.name}}<br/> <b>age:</b>{{object.age}}<br/></body></html>
使用通用视图DetailView.png