Общий вид 'archive_year' создает пустую страницу - PullRequest
3 голосов
/ 11 августа 2009

Я использую общие представления Django для создания сайта блога. созданные мной шаблоны entry_archive_day, entry_archive_month, entry_archive и entry_detail все работают отлично.

Но entry_archive_year нет. Вместо этого это просто допустимая страница без содержимого (не ошибка 404 или другая ошибка. Похоже, она не видит объектов в **object_list**.

Я знаю, что archive использует список latest вместо object_list, но это не так с archive_year, правильно?

Спасибо!

1 Ответ

5 голосов
/ 11 августа 2009

Для решения вашей проблемы:

Если вы установите 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...