Django笔记4-use generic views

使用generic views 

很多的视图层(view)非常相似,像前面的代码中的detail() 跟results()方法.这些都是基本的web开发:从数据库拿到数据,加载模板,把数据呈现在网页上.Django提供了一个shortcut, "generic views" system

把前面部分的django代码进行转换到generic views system

需要3个步骤 1.Convert the URLconf : 转换URLconfig

                    2.   Delete some of the old, unneeded views. :删除不需要的view函数代码

                     3. Introduce new views based on Django’s generic views :基于generic views编写新的views


Django笔记4-use generic views_第1张图片

把原先views.py中的各个view方法更改为继承generic.ListView或generic.DetailView

这里的2个generic view

generic.ListView : 'display a list of objects'

generic.DetailView: "display a detail page for a particular type of object

每一个generic view 需要知道它们需要的model是哪个。通过model 属性来传入 如model = Question 定义了DetailViews可以传递Question这个model(数据库的表?)

DetailView 这个generic view需要一个通过url传入pk这个值来作为主键去数据库寻找对应的数据

template_name 这个属性是用来告诉django 使用一个指定的html template 来代替django自己默认设置的模板(默认的模板/_detail.html)

对于ListView ,template_name的默认值是/_list.html

修改urls.py


Django笔记4-use generic views_第2张图片

这里需要注意,因为DetailView是通过pk来查数据的。以前的question_id要改为pk。


这里有个坑:

对于DetailView 。里面question 变量是自动通过Question 这个model来自动匹配。但是对于ListView 这里有一个context_object_name属性 :这个属性是用来对listview中返回的数据库数据列表进行命名。然后在对于的html页面上展示。

Django笔记4-use generic views_第3张图片
图中红线圈的地方就是context_object_name定义的值

你可能感兴趣的:(Django笔记4-use generic views)