The Django Book: 第9章 Generic views
这又是一个本书重现的主题:最坏的情况下,web开发是无聊和乏味的
目前为止我们讲到Django怎样试图在模型和模板层去除单调乏味,但是web开发人员也在视图层感到厌倦
Django的generic views就是开发来解除这个痛苦的,它在视图开发上采用了一些常用的惯例和模式,
并且把视图开发抽象出来,以致你可以在数据之上用不多的代码迅速的写常见的视图
事实上,前面章节中几乎每个视图例子都可以用generic views重写
Django包含generic views来做下面的事情:
1,处理常见的简单任务:重定向到不同的页面和渲染给定的模板
2,显示列表和一个单独对象的细节页面,例如Django文档首页和单独的文档页面就是这种形式
(http://www.djangoproject.com/documentation)从第5章开始的视图可以很容易的使用
generic views重写,我们下面将做这件事
3,在year/month/day存档页面显示基于日期的对象,相关的细节以及最近的页面,Django的weblog
(http://www.djangoproject.com/weblog)的year,month和day存档就是用基于此构建的
以及ljworld.com的新闻存档等等
4,允许用户使用授权或不使用授权来创建,编辑,删除对象
总的来说,这些视图提供了容易的接口来处理开发人员遇到的最常见的任务
使用generic views
所有的这些视图被用来在你的URL配置文件里创建配置字典并把这些字典作为第3个参数传递给一个给定的模式
例如下面是一个简单的在djangoproject.com上写blog的weblog app的URL配置:
代码from django.conf.urls.defaults import * from django_website.apps.blog.models import Entry info_dict = { 'queryset': Entry.objects.all(), 'date_field': 'pub_date', } urlpatterns = patterns('django.views.generic.date_based', (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-\w]+)/$', 'object_detail', dict(info_dict, slug_field='slug')), (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/$', 'archive_day', info_dict), (r'^(?P<year>\d{4})/(?P<month>[a-z]{3})/$', 'archive_month', info_dict), (r'^(?P<year>\d{4})/$', 'archive_year', info_dict), (r'^/?$', 'archive_index', info_dict), )
它会工作,因为generic views返回简单的HttpResponse对象,而这个对象可以被当成字典来设置HTTP头部
顺便说一下,这个Content-Disposition逻辑会指示浏览器下载并保存页面而不是在浏览器里显示它
下一步是什么?
到现在为止,我们已经认为模板引擎是你用来渲染context的最固定不变的工具
这是对的,大部分情况下你只是这样认为,但是模板引擎事实上扩展性很强
下一章我们将深入Django的模板,带你领略它被扩展的最酷的方式
同志,向前! |