Django版本:1.11
操作系统:Windows
Python:3.5
欢迎加入学习交流QQ群:657341423
这章介绍通用视图,这个通用视图主要在views.py里面编写和定义的。
通用视图,主要作用就是快捷地将数据库数据呈现出网页上。
假设,我要在www.xxx.com/bookInfomation/显示一个表单,里面显示的是书包信息,然后表单下面是一些操作按钮等。
分析:针对这个网页,第一个生成1个table是用于显示数据的,第二个要生成1个表单()是用于按钮操作的。
第二个是form,这个可以参考Python Django基础教程(五)
第一个生成1个table的,可以用之前的方法,就是在views.py定义一个def,然后render_to_response或者render返回。基本上这是万能的方法。
此外还有一种比较简化的方法,这个就简化了代码冗余,可以小的代码实现table生成,这也就是通用视图
通用视图常用分为TemplateView、ListView和DetailView
TemplateView:可以方便的定义要返回的模板但它不能把数据库中的内容查询展示出来
如果设计到数据库数据,则ListView和DetailView。
ListView和DetailView有区别。ListView 用来获取某个 model 中的所有数据,而 DetailView 则是获取每个数据的详细信息。
ListView详解:
views.py
template_name指定那一个html文件。
context_object_name是html里面的变量名。
get_queryset函数确定变量的值。如果取消注释#model = Publisher,去除这个方法,默认全部值。具体看图中注释。
get_context_data是查询另外数据表的数据的。注释的代码和没有注释实现功能一样的。
urls.py
写url的时候,记得import models即可。
PublisherList.as_view():PublisherList为views.py的类名。.as_view()是必需的。
html
如果要其他数据,可以这样写:
<li>{{ publisher.city}}</li>
运行结果:
扩展:
因为我这个PublisherList默认是filter筛选条件的,如果要更换条件的话,可以这样做:
urls.py
publisher/后面带参数来确定最终url
实例:
结合上述url带参数方法,如果我在form里面的实现了一个post或者get,然后跳到对应views.py
的方法,可以用:即在网页上输入查询条件,然后点击确定按钮后,可以用重定向方法,跳转到指定通用视图的url上,将条件作为url的一部分,实现筛选和查询。
return HttpResponseRedirect('/polls/publisher/'+name+'/')
重定向跳到查询后的表格。
DetailView详解:
urls.py
views.py
原理和ListView大同小异。
html:
唯独注意的是,红色框的写法和ListView不一样的。
get_context_data额外增加的数据和ListView一样的。因为get_context_data里面的代码一样的。
运行结果
注意,这里红色内容,是参数,DetailView会根据这个参数去选择数据库那条数据的。
总结:通用视图实现的功能,基本上可以基础教程里面的方法实现的。而通用视图的最重要作用就是减小开发者的代码量。