Выберите отдельные годы и месяцы для страницы архива Django
-
21-08-2019 - |
Вопрос
Я хочу создать страницу archive_index для своего сайта Django.Однако общие представления на основе дат на самом деле бесполезны.Я хочу, чтобы словарь, возвращаемый представлением, содержал все годы и месяцы, для которых существует хотя бы один экземпляр типа объекта.Итак, если бы мой блог стартовал в сентябре 2007 года, но в апреле 2008 года не было сообщений, я мог бы получить что-то вроде этого
2009 - Jan, Feb, Mar 2008 - Jan, Feb, Mar, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec 2007 - Sep, Oct, Nov, Dec
Решение
Это даст вам список уникальных дат публикации:
Posts.objects.filter(draft=False).dates('post_date','month',order='DESC')
Конечно, вам может не понадобиться фильтр черновиков и измените «post_date» на имя вашего поля и т. д.
Другие советы
Я нашел ответ на свой вопрос.
Это на этой странице в документации.
Есть функция date, которая выдает вам отдельные даты.Так что я могу сделать
Entry.objects.dates('pub_date','month') для получения списка объектов datetime, по одному на каждый год/месяц.
Вы сможете получить всю описанную вами информацию из встроенных представлений.Можете ли вы уточнить, чего вы не можете получить?Здесь должно быть все, что вам нужно:
django.views.generic.date_based.archive_month
Справочная страница (найдите указанную выше строку на этой странице)