在Python的Django框架中显示对象子集的方法
现在让我们来仔细看看这个queryset。大多数通用视图有一个queryset参数,这个参数告诉视图要显示对象的集合。
举一个简单的例子,我们打算对书籍列表按出版日期排序,最近的排在最前:
book_info={
'queryset':Book.objects.order_by('-publication_date'),
}
urlpatterns=patterns('',
(r'^publishers/$',list_detail.object_list,publisher_info),
**(r'^books/$',list_detail.object_list,book_info),**
)
这是一个相当简单的例子,但是很说明问题。当然,你通常还想做比重新排序更多的事。如果你想要呈现某个特定出版商出版的所有书籍列表,你可以使用同样的技术:
**apress_books={**
**'queryset':Book.objects.filter(publisher__name='ApressPublishing'),**
**'template_name':'books/apress_list.html'**
**}**
urlpatterns=patterns('',
(r'^publishers/$',list_detail.object_list,publisher_info),
**(r'^books/apress/$',list_detail.object_list,apress_books),**
)
注意在使用一个过滤的queryset的同时,我们还使用了一个自定义的模板名称。如果我们不这么做,通用视图就会用以前的模板,这可能不是我们想要的结果。
同样要注意的是这并不是一个处理出版商相关书籍的最好方法。如果我们想要添加另一个出版商页面,我们就得在URL配置中写URL配置,如果有很多的出版商,这个方法就不能接受了。