Что использовать в Django: ListView или list_detail? - PullRequest
6 голосов
/ 23 марта 2012

Я читал некоторые учебники и книги о общих видах .

В части 4 официального руководства они написали пример, подобный этому

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

Я также читал Полное руководство по Django: веб-разработка выполнена правильно, второе издание , и когда они говорили об общих представлениях, они написали свой пример, подобный этому

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. Если они оба могут быть использованы, то в чем разница (сравнение преимуществ и недостатков)?

В случае, если это поможет, я объясню свою цель: в моем проекте я хочу перечислить рабочие задания, а затем я хочу детальный просмотр каждого рабочего задания, который также будет содержать список комментариев для этого заказа (аналогично к комментариям к сообщению в блоге).

Ответы [ 2 ]

12 голосов
/ 08 октября 2012

Я считаю, что Classy полезен как простой способ просмотра схемы каждого CBV: http://ccbv.co.uk/projects/Django/1.6/django.views.generic.list/ListView/

Теперь это похоже на недостающую часть документации по Django.

10 голосов
/ 23 марта 2012

ListView (на основе классов) предназначен для замены object_list (на основе функций), поскольку возможности расширения поведения функции ограничены.

Как документация Django (1.4)примечания , основанные на функциях общие представления устарели в пользу версий на основе классов.Так что используйте ListView, так как Django удалил object_list.

В любом случае, я предпочитаю помещать все настройки в views.py, чтобы не загромождать urls.py, который, как правило, является дампом вещей..

...