direct_to_template 毫無(wú)疑問(wèn)是非常有用的,但Django通用視圖最有用的地方是呈現(xiàn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。 因?yàn)檫@個(gè)應(yīng)用實(shí)在太普遍了,Django帶有很多內(nèi)建的通用視圖來(lái)幫助你很容易 地生成對(duì)象的列表和明細(xì)視圖。
讓我們先看看其中的一個(gè)通用視圖: 對(duì)象列表視圖。 我們使用第五章中的 Publisher 來(lái)舉例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Publisher(models.Model): name = models.CharField(max_length = 30 ) address = models.CharField(max_length = 50 ) city = models.CharField(max_length = 60 ) state_province = models.CharField(max_length = 30 ) country = models.CharField(max_length = 50 ) website = models.URLField() def __unicode__( self ): return self .name class Meta: ordering = [ 'name' ] |
要為所有的出版商創(chuàng)建一個(gè)列表頁(yè)面,我們使用下面的URL配置:
1
2
3
4
5
6
7
8
9
10
11
|
from django.conf.urls.defaults import * from django.views.generic import list_detail from mysite.books.models import Publisher publisher_info = { 'queryset' : Publisher.objects. all (), } urlpatterns = patterns('', (r '^publishers/$' , list_detail.object_list, publisher_info) ) |
這就是所要編寫(xiě)的所有Python代碼。 當(dāng)然,我們還需要編寫(xiě)一個(gè)模板。 我們可以通過(guò)在額外參數(shù)字典中包含一個(gè)template_name鍵來(lái)顯式地告訴object_list視圖使用哪個(gè)模板:
1
2
3
4
5
6
7
8
9
10
11
12
|
from django.conf.urls.defaults import * from django.views.generic import list_detail from mysite.books.models import Publisher publisher_info = { 'queryset' : Publisher.objects. all (), * * 'template_name' : 'publisher_list_page.html' , * * } urlpatterns = patterns('', (r '^publishers/$' , list_detail.object_list, publisher_info) ) |
在缺少template_name的情況下,object_list通用視圖將自動(dòng)使用一個(gè)對(duì)象名稱(chēng)。 在這個(gè)例子中,這個(gè)推導(dǎo)出的模板名稱(chēng)將是 "books/publisher_list.html" ,其中books部分是定義這個(gè)模型的app的名稱(chēng), publisher部分是這個(gè)模型名稱(chēng)的小寫(xiě)。
這個(gè)模板將按照 context 中包含的變量 object_list 來(lái)渲染,這個(gè)變量包含所有的書(shū)籍對(duì)象。 一個(gè)非常簡(jiǎn)單的模板看起來(lái)象下面這樣:
1
2
3
4
5
6
7
8
9
10
|
{ % extends "base.html" % } { % block content % } <h2>Publishers< / h2> <ul> { % for publisher in object_list % } <li>{{ publisher.name }}< / li> { % endfor % } < / ul> { % endblock % } |
(注意,這里我們假定存在一個(gè)base.html模板。)
這就是所有要做的事。 要使用通用視圖酷酷的特性只需要修改參數(shù)字典并傳遞給通用視圖函數(shù)。 附錄D是通用視圖的完全參考資料;本章接下來(lái)的章節(jié)將講到自定義和擴(kuò)展通用視圖的一些方法。