2012-03-23 24 views
6

我正在閱讀一些關於generic views的教程和書籍。在Django中使用哪個:ListView或list_detail?

part 4 of the official tutorial,他們寫了一個例子像這樣

from django.conf.urls import patterns, include, url 
from django.views.generic import DetailView, ListView 
from polls.models import Poll 

urlpatterns = patterns('', 
    url(r'^$', 
     ListView.as_view(
      queryset=Poll.objects.order_by('-pub_date')[:5], 
      context_object_name='latest_poll_list', 
      template_name='polls/index.html')), 
    url(r'^(?P<pk>\d+)/$', 
     DetailView.as_view(
      model=Poll, 
      template_name='polls/detail.html')), 
    url(r'^(?P<pk>\d+)/results/$', 
     DetailView.as_view(
      model=Poll, 
      template_name='polls/results.html'), 
     name='poll_results'), 
    url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'), 
) 

我也一直在讀The Definitive Guide to Django: Web Development Done Right, Second Edition,當他們談到一般的看法,他們寫了這樣

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) 
) 

自己的例子,我應該是使用ListViewlist_detail?他們都來自django.views.generic。如果他們都可以使用,那麼有什麼區別(優勢和劣勢比較)?

如果有幫助,我會解釋我的目標:在我的項目中,我想列出工作訂單,然後我想要每個工作訂單的詳細視圖,其中還將包含該訂單的註釋列表(類似於每篇博文的評論)。

回答

10

ListView(基於類)旨在取代object_list(基於函數),因爲擴展函數行爲的靈活性有限。

作爲Django (1.4) documentation notes,基於功能的通用視圖已被棄用,以支持基於類的版本。因此,使用ListView,因爲Django刪除了object_list

無論哪種方式,我寧願將所有的自定義設置放在views.py中,以避免混亂的urls.py,這往往是一個傾倒的東西。

+1

我不太瞭解基於類的通用視圖文檔。例如,對於['ListView'](https://docs.djangoproject.com/en/dev/ref/class-based-views/#list-views),爲什麼條目很短?我在哪裏可以找到所有方法和變量的列表? – hobbes3 2012-03-23 05:47:05

+4

不幸的是,它是Django方面糟糕文檔的一部分(部分原因是因爲多重繼承)。但是你可以查看他們的子類:例如 - https://docs.djangoproject.com/en/dev/ref/class-based-views/#django.views.generic.list.MultipleObjectMixin – Jeff 2012-03-23 06:46:09

12

我發現優等作爲一種簡單的方法來查看每個CBV的輪廓有用:http://ccbv.co.uk/projects/Django/1.6/django.views.generic.list/ListView/

現在感覺就像Django文檔的丟失部分。

+3

這不是被接受的答案,但是這個資源是驚人的。 – edhedges 2012-12-06 02:40:48

+0

不幸的是,鏈接似乎中斷:( – moooeeeep 2014-03-19 13:05:34

+0

剛剛檢查它,並且該網址仍然適用於我 - 我使用它大部分時間。編輯註釋以包括Dj 1.6。 – trojjer 2014-03-20 11:47:44

相關問題