WeekArchiveView

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

Синтаксис

pythonfrom django.views.generic.dates import WeekArchiveView

class MyWeekArchiveView(WeekArchiveView):
  model = MyModel
  date_field = "created_at"

Параметры

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

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

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

pythonfrom 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 с указанием параметров года и недели:

pythonfrom 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-адресу, содержащему год и номер недели.

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

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

html<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 для кастомизации выборки объектов:

pythonfrom 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:

pythonfrom 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,
    который отображает архив объектов за текущий день