Чтобы решить вашу проблему:
Если вы установили 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
имеет дополнительный rgument make_object_list
. По умолчанию установлено значение false, а object_list
передается шаблону в виде пустого списка.
make_object_list
: Логическое значение, указывающее, следует ли получить полный список объектов за этот год и передать их в шаблон. Если True
, этот список объектов станет доступным для шаблона как object_list
. (Название object_list
может отличаться, см. Документы для object_list
в разделе «Шаблон контекста» ниже.) По умолчанию это False
.
Причина в том, что вы не всегда можете отображать список всех объектов в представлении entry_archive_year
. У вас могут быть сотни сообщений в блогах за этот год, слишком много для отображения на одной странице.
archive_year
см. Иллюстрации для использования в шаблоне. Это позволяет создавать ссылки на ежемесячные архивные страницы того года, за месяцы, в которых есть записи.
date_list
: Список datetime.date
объектов, представляющих все месяцы, которые имеют объекты, доступные в данном году, в соответствии с QuerySet, в порядке возрастания.
Более подробная информация содержится в документе Django docs.
В соответствии с просьбой в комментарии ниже, пример того, как использовать 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>
Обратите внимание, что я hardcoded url - на практике было бы лучше использовать url template tag. Пример date_list
используется в дикой природе, посмотрите на Django Weblog 2009 Archive.
Отлично! Благодарим вас за ваш быстрый и четко сформулированный ответ. Я не был уверен, как передать настройку с urls.py, но нашел этот пример: http://github.com/garethr/django-train/blob/ed60ace848e39d2d007929b2316d090886887a57/src/train/urls.py Как после этого, у вас есть ссылка на хороший пример с использованием date_list? –
Я добавил пример, показывающий, как изменить urls.py в случае, если кто-то еще имеет такую же проблему в будущем, и написал немного больше о 'date_list'. – Alasdair
Еще раз спасибо за подробный пост и последующие действия. –