2012-03-23 6 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) 
) 

की तरह उनके उदाहरण लिखा था मैं होना चाहिए ListView या list_detail का उपयोग कर? वे दोनों django.views.generic से आते हैं। यदि वे दोनों का उपयोग किया जा सकता है, तो अंतर क्या है (लाभ और हानिकारक तुलना)?

यदि यह मदद करता है, तो मैं अपना उद्देश्य समझाऊंगा: मेरी परियोजना में, मैं कार्य आदेशों को सूचीबद्ध करना चाहता हूं, और फिर मैं प्रत्येक कार्य आदेश का एक विस्तृत दृश्य चाहता हूं जिसमें उस आदेश के लिए टिप्पणियों की एक सूची भी शामिल होगी (प्रति ब्लॉग पोस्ट टिप्पणियों के समान)।

उत्तर

10

ListView (कक्षा-आधारित) object_list (फ़ंक्शन-आधारित) को प्रतिस्थापित करने का इरादा है क्योंकि फ़ंक्शन के व्यवहार को विस्तारित करने के लिए सीमित लचीलापन है।

Django (1.4) documentation notes के रूप में, फ़ंक्शन-आधारित जेनेरिक दृश्य क्लास-आधारित संस्करणों के पक्ष में बहिष्कृत किए जाते हैं। तो ListView का उपयोग करें, क्योंकि Django ने object_list हटा दिया है।

किसी भी तरह से, मैं urls.py को अपनाने से बचने के लिए views.py में सभी अनुकूलन रखना पसंद करता हूं, जो चीजों का डंपिंग ग्राउंड होता है।

+1

मैं कक्षा आधारित जेनेरिक व्यू दस्तावेज़ों को वास्तव में समझ नहीं पा रहा हूं। उदाहरण के लिए, ['ListView'] के लिए (https://docs.djangoproject.com/en/dev/ref/class-based-views/#list-views), प्रविष्टि इतनी छोटी क्यों है? मुझे सभी विधियों और चरों की सूची कहां मिल सकती है? – hobbes3

+4

दुर्भाग्यवश, यह Django के हिस्से (आंशिक रूप से एकाधिक विरासत के कारण) पर खराब दस्तावेज़ का हिस्सा है। लेकिन आप देख सकते हैं कि वे क्या उपclass: उदा। - https://docs.djangoproject.com/en/dev/ref/class-based-views/#django.views.generic.list.MultipleObjectMixin – Jeff

12

मैं उत्तम दर्जे का प्रत्येक CBV की एक रूपरेखा को देखने के लिए एक आसान तरीका के रूप में उपयोगी खोजने हूँ: http://ccbv.co.uk/projects/Django/1.6/django.views.generic.list/ListView/

अब यह Django किए गए दस्तावेज़ों की एक लापता हिस्सा की तरह लगता है।

+3

यह स्वीकार्य उत्तर नहीं है, लेकिन यह संसाधन अद्भुत है। – edhedges

+0

दुर्भाग्य से, लिंक टूटा हुआ दिखाई देता है :( – moooeeeep

+0

बस इसे चेक किया गया और यूआरएल अभी भी मेरे लिए काम करता है - मैं इसे अधिकतर दिनों का उपयोग करता हूं। डीजे 1.6 को शामिल करने के लिए टिप्पणी संपादित की गई। – trojjer

संबंधित मुद्दे