class Admin:
pass
要为所有的书籍创建一个列表页面,我们使用下面的URL配置:
from django.conf.urls.defaults import *
from django.views.generic import list_detail
from mysite.books.models import Publisher
# Look up the publisher (and raise a 404 if it can't be found).
try:
publisher = Publisher.objects.get(name__iexact=name)
except Publisher.DoesNotExist:
raise Http404
# Use the object_list view for the heavy lifting.
return list_detail.object_list(
request,
queryset = Book.objects.filter(publisher=publisher),
template_name = "books/books_by_publisher.html",
template_object_name = "books",
extra_context = {"publisher" : publisher}
)
4这是因为通用视图就是Python函数。和其他的视图函数一样,通用视图也是接受一些参数并返回 HttpResponse 对象。因此,通过包装通用视图函数可以做更多的事。
注意
注意到在前面这个例子中我们在 extra_context 传递了当前出版商这个参数。这在包装时通常是一个好注意;它让模板知道当前显示内容的上一层对象。
处理额外工作我们再来看看最后一个常用模式:在调用通用视图前后做些额外工作。
想象一下我们在 Author 对象里有一个 last_accessed 字段,我们用这个字段来更正对author的最近访问时间。当然通用视图 object_detail 并不能处理这个问题,我们可以很容易的写一个自定义的视图来更新这个字段。
首先,我们需要在URL配置里设置指向到新的自定义视图:
from mysite.books.views import author_detail
urlpatterns = patterns('',
#...
**(r'^authors/(?P<author_id>d+)/$', author_detail),**
)
1接下来写包装函数:
import datetime
from mysite.books.models import Author
from django.views.generic import list_detail
from django.shortcuts import get_object_or_404
def author_detail(request, author_id):
# Look up the Author (and raise a 404 if she's not found)
author = get_object_or_404(Author, pk=author_id)
# Record the last accessed date
author.last_accessed = datetime.datetime.now()
author.save()