Для решения вашей проблемы:
Если вы установите make_object_list=True
при вызове archive_year
, тогда список объектов на этот год будет доступен как object_list
.
В качестве быстрого примера, если ваш шаблон URL выглядит как
url(r'^(?P<year>\d{4})/$', 'archive_year', info_dict, name="entry_archive_year")
где info_dict
- словарь, содержащий queryset
и date_field
, измените его на
url(r'^(?P<year>\d{4}/$', 'archive_year', dict(info_dict,make_object_list=True),
name="entry_archive_year")
Пояснение:
Общий вид archive_year
имеет необязательный аргумент make_object_list
. По умолчанию для него установлено значение false, и object_list
передается в шаблон в виде пустого списка.
make_object_list
: логическое значение, указывающее, следует ли получить полный список объектов за этот год и передать их в шаблон. Если True
, этот список объектов будет доступен для шаблона как object_list
. (Имя object_list
может отличаться; см. Документы для object_list
в разделе «Контекст шаблона» ниже.) По умолчанию это False
.
Причина этого в том, что вы не всегда хотите отображать весь список объектов в представлении entry_archive_year
. У вас может быть сотни сообщений за этот год, слишком много, чтобы отображаться на одной странице.
Вместо этого archive_year
добавляет date_list
в контекст шаблона. Это позволяет создавать ссылки на ежемесячные архивные страницы того года для месяцев, в которых есть записи.
date_list
: список datetime.date
объектов, представляющих все месяцы, в которых имеются объекты, доступные в данном году, в соответствии с набором запросов, в порядке возрастания.
Более подробная информация содержится в Django документах .
Как указано в комментарии ниже, пример использования date_list
:
Чтобы использовать date_list
, ваш шаблон entry_archive_year
будет содержать что-то вроде этого:
<ul>
{% for month in date_list %}
<li><a href="/blog/{{month|date:"Y"}}/{{month|date:"b"}}>
{{month|date:"F"}}</a></li>
{% endfor %}
</ul>
Обратите внимание, что я жестко запрограммировал URL-адрес - на практике было бы лучше использовать тег шаблона URL-адреса . Пример использования date_list
в дикой природе можно найти в Django Weblog 2009 Archive .