РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
324 of 818 menu

WeekArchiveView

Класс WeekArchiveView наследуется от базового представления Django и предназначен для создания страниц архива записей, сгруппированных по неделям. Он автоматически извлекает из URL параметры года и недели, формирует выборку объектов за указанную неделю и передает их в шаблон. Для работы представления необходимо указать модель и поле даты, по которому будет выполняться фильтрация.

Синтаксис

from django.views.generic.dates import WeekArchiveView class MyWeekArchiveView(WeekArchiveView): model = MyModel date_field = "created_at"

Параметры

Класс WeekArchiveView принимает следующие основные параметры:

  • model - модель, объекты которой будут отображаться
  • date_field - поле модели с типом DateTimeField или DateField, по которому выполняется группировка
  • template_name - имя шаблона для отображения архива
  • context_object_name - имя переменной контекста для списка объектов
  • allow_empty - разрешает или запрещает отображение страницы при отсутствии объектов

Пример . Использование

Давайте создадим представление для отображения статей, опубликованных за определенную неделю:

from django.views.generic.dates import WeekArchiveView from myapp.models import Article class ArticleWeekArchiveView(WeekArchiveView): model = Article date_field = "published_at" template_name = "article_week_archive.html" context_object_name = "articles" allow_empty = True

Настройка URL

Для работы представления необходимо настроить маршрут в файле urls.py с указанием параметров года и недели:

from django.urls import path from myapp.views import ArticleWeekArchiveView urlpatterns = [ path( "archive/<int:year>/week/<int:week>/", ArticleWeekArchiveView.as_view(), name="article_week_archive" ), ]

После настройки маршрута представление будет доступно по URL-адресу, содержащему год и номер недели.

Пример . Шаблон

В шаблоне доступны переменные контекста для отображения списка объектов и информации о неделе:

<h1>Статьи за неделю {{ week|date:"W" }}, {{ week|date:"Y" }}</h1> <ul> {% for article in articles %} <li>{{ article.title }} ({{ article.published_at|date:"d.m.Y" }})</li> {% empty %} <li>Нет статей за эту неделю</li> {% endfor %} </ul>

Дополнительная настройка

Вы можете переопределить метод get_queryset для кастомизации выборки объектов:

from django.views.generic.dates import WeekArchiveView from myapp.models import Article class ArticleWeekArchiveView(WeekArchiveView): model = Article date_field = "published_at" context_object_name = "articles" def get_queryset(self): queryset = super().get_queryset() return queryset.filter(status="published")

Обработка ошибок

Если объекты за указанную неделю не найдены, представление по умолчанию выбрасывает ошибку Http404. Чтобы избежать этого, установите параметр allow_empty в значение True:

from django.views.generic.dates import WeekArchiveView from myapp.models import Article class ArticleWeekArchiveView(WeekArchiveView): model = Article date_field = "published_at" allow_empty = True context_object_name = "articles"

Смотрите также

  • класс YearArchiveView,
    который отображает архив объектов за год
  • класс MonthArchiveView,
    который отображает архив объектов за месяц
  • класс DayArchiveView,
    который отображает архив объектов за день
  • класс TodayArchiveView,
    который отображает архив объектов за текущий день
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить