2015-04-21 6 views
3

В Django существует общий вид с именем YearArchiveView, который имеет атрибут make_object_list.Django's YearArchiveView общий вид даты

Может кто-нибудь объяснить мне, почему этот вариант фактически существует вообще?

Не логично ли, что если мне нужен набор запросов на основе года, то очевидно, что мне нужен список объектов, даже если у него есть только один объект. Или я неправильно понимаю что-то здесь.

ответ

1

TLDR;make_object_list возвращает все объекты для данного YearArchiveView в контексте представления под object_list. По умолчанию make_object_list является False, что приведет к тому, что возвращаемый контекст object_list будет пустым.

Так что django documentation немного сложно понять на этой части. Но, надеюсь, это помогает (подсказка: глядя на source code действительно помогает).

YearArchiveView будет возвратом по умолчанию в контексте следующего:

  • date_list: A Дата QuerySet возвращающей все месяцы, которые имеют объекты в них.
  • год: дата объекта за данный год.
  • next_year: объект даты для первого дня следующего года.
  • previous_year: объект даты в течение первого дня предыдущего года.

В этом списке вы увидите, что объекты запроса для заданного года при возврате пустые.

make_object_list Так сверху мы знаем, что контекст по умолчанию будет возвращать число значений, относящихся к датам объектов в текущем году,, предыдущий и следующий, но без каких-либо реальных объектов QuerySet из базы данных.

Значение make_object_list, которое должно быть истинным в YearArchiveView, приведет к тому, что все объекты запроса для данного года будут переданы обратно через контекст, чтобы они могли использоваться в представлении.

В шаблоне объекты запроса будут доступны в контексте object_list.

Когда в шаблоне для данного YearArchiveView, вы можете использовать:

{% for item in object_list %} 
    <strong>item.title</strong> - {{ item.date }} 
{% endfor %} 
+0

Это сейчас очень понятно для меня, но все же нужно работать над этим, чтобы понять его полностью. И еще один вопрос возникает из-за этого во мне, и именно поэтому тогда другие общие представления, такие как ** MonthArchiveView ** и ** DayArchiveView **, тоже не имеют этого атрибута? –

+0

Я считаю, что для этого есть две основные причины. Во-первых, количество возвращаемых данных. Во-вторых, вы чаще всего суммируете статьи ежемесячно или ежедневно, а не через год. –

1

В дополнение к @MattWritesCode ответ я бы сказал, что есть случаи использования, когда вы заинтересованы только в создании навигации и не включая большую часть реальных объектов.

Я представляю, что занимаюсь 1000-ю статьями, как это делают большие газеты. Скорее всего, я хочу отобразить фактическое содержимое в отдельном представлении, которое поддерживает подкачку (и, возможно, мелкозернистый доступ к разрешению, например, публичные сообщения и сообщения за платой).

Хороший вопрос, хотя, я просто размышляю об этом. Поскольку запросы являются ленивыми, я бы не ожидал, что это будет большой прирост производительности, но, возможно, каким-то образом это тоже аспект.Было бы интересно узнать больше об этом.

Смежные вопросы