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

Класс TodayArchiveView

Класс TodayArchiveView применяется для создания страницы архива, отображающей объекты модели, относящиеся к сегодняшней дате. Он наследуется от BaseDateArchiveView и автоматически определяет текущую дату для фильтрации. Класс позволяет настроить модель, поле с датой, шаблон и контекстные переменные. Также можно указать параметр allow_empty для управления отображением при отсутствии записей.

Синтаксис

from django.views.generic.dates import TodayArchiveView class MyTodayArchiveView(TodayArchiveView): model = MyModel date_field = "created_at" template_name = "myapp/today_archive.html" context_object_name = "today_objects" allow_empty = True

Пример

Давайте создадим представление, которое выводит список статей, опубликованных сегодня. Модель Article имеет поле pub_date типа DateTimeField:

from django.db import models class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() pub_date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title

А это представление, которое использует TodayArchiveView для вывода сегодняшних статей:

from django.views.generic.dates import TodayArchiveView from .models import Article class ArticleTodayArchiveView(TodayArchiveView): model = Article date_field = "pub_date" template_name = "articles/today_archive.html" context_object_name = "today_articles" allow_empty = True

Теперь добавим маршрут в urls.py:

from django.urls import path from .views import ArticleTodayArchiveView urlpatterns = [ path("today/", ArticleTodayArchiveView.as_view(), name="article_today_archive"), ]

При переходе по адресу /today/ отобразятся все статьи, дата публикации которых совпадает с сегодняшним днём.

Пример

Класс позволяет использовать кастомный queryset с дополнительной фильтрацией, например, отображать только опубликованные записи, у которых поле is_published равно True:

from django.views.generic.dates import TodayArchiveView from .models import Article class PublishedTodayArchiveView(TodayArchiveView): model = Article date_field = "pub_date" template_name = "articles/published_today.html" context_object_name = "published_today" allow_empty = False def get_queryset(self): queryset = super().get_queryset() return queryset.filter(is_published=True)

Этот код вернёт только те сегодняшние статьи, у которых is_published равно True. Если таких записей нет, а allow_empty установлен в False, будет вызвана ошибка Http404.

Пример

Также можно переопределить метод get_context_data для добавления дополнительных данных в контекст шаблона. Например, передадим количество сегодняшних записей:

from django.views.generic.dates import TodayArchiveView from .models import Article class ArticleTodayArchiveView(TodayArchiveView): model = Article date_field = "pub_date" template_name = "articles/today_archive.html" context_object_name = "today_articles" allow_empty = True def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["today_count"] = self.get_queryset().count() return context

Теперь в шаблоне доступна переменная today_count, содержащая количество записей за сегодня. Это позволяет выводить информацию вроде «Сегодня опубликовано 5 статей».

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

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