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

Класс DateDetailView

Класс DateDetailView применяется для отображения конкретной записи модели, при этом дата объекта извлекается из URL-параметров (год, месяц, день). Это позволяет показывать детали объекта, привязанного к конкретной дате. Класс наследуется от DetailView и добавляет фильтрацию по дате с использованием параметров year, month и day, переданных в URL.

Основные атрибуты класса: model - модель, с которой работает представление; template_name - шаблон для отображения; date_field - поле модели, содержащее дату (обязательно для фильтрации); context_object_name - имя переменной контекста для объекта. Также можно указать slug_field и slug_url_kwarg для идентификации объекта по слагу, если требуется.

Синтаксис

Базовое использование в файле urls.py:

from django.urls import path from myapp.views import ArticleDateDetailView urlpatterns = [ path('article/<int:year>/<int:month>/<int:day>/<slug:slug>/', ArticleDateDetailView.as_view(), name='article-detail'), ]

Определение класса представления в views.py:

from django.views.generic import DateDetailView from myapp.models import Article class ArticleDateDetailView(DateDetailView): model = Article date_field = 'published_date' slug_field = 'slug' context_object_name = 'article' template_name = 'article_detail.html'

Пример

Рассмотрим базовый пример с моделью Article, имеющей поля published_date (дата публикации) и slug (уникальный идентификатор). Создадим представление, которое отображает статью по году, месяцу, дню и слагу:

# models.py from django.db import models class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() published_date = models.DateTimeField() slug = models.SlugField(unique=True) def __str__(self): return self.title # views.py from django.views.generic import DateDetailView from myapp.models import Article class ArticleDateDetailView(DateDetailView): model = Article date_field = 'published_date' slug_field = 'slug' context_object_name = 'article' template_name = 'article_detail.html' # urls.py from django.urls import path from myapp.views import ArticleDateDetailView urlpatterns = [ path('article/<int:year>/<int:month>/<int:day>/<slug:slug>/', ArticleDateDetailView.as_view(), name='article-detail'), ]

При обращении к URL /article/2026/9/7/django-tutorial/ представление автоматически найдет статью с датой публикации 7 сентября 2026 года и слагом 'django-tutorial'. Результат будет передан в шаблон как переменная article.

Пример

Использование DateDetailView с кастомной фильтрацией через переопределение метода get_queryset. Это может понадобиться, если требуется ограничить выборку, например, только опубликованными статьями:

from django.views.generic import DateDetailView from myapp.models import Article class CustomArticleDateDetailView(DateDetailView): model = Article date_field = 'published_date' slug_field = 'slug' context_object_name = 'article' template_name = 'article_detail.html' def get_queryset(self): queryset = super().get_queryset() return queryset.filter(status='published')

Теперь представление будет отображать только те статьи, у которых поле 'status' равно 'published'. Если статья с заданной датой и слагом не найдена, будет выброшена ошибка Http404.

Результат выполнения кода при запросе к существующей статье:

"Article object: Django Tutorial"

Пример

Переопределим метод get_context_data для добавления дополнительных данных в контекст шаблона, например, списка комментариев к статье:

from django.views.generic import DateDetailView from myapp.models import Article, Comment class ArticleDateDetailView(DateDetailView): model = Article date_field = 'published_date' slug_field = 'slug' context_object_name = 'article' template_name = 'article_detail.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) article = self.object context['comments'] = Comment.objects.filter(article=article) return context

Теперь в шаблоне доступна переменная comments, содержащая все комментарии к текущей статье. Это позволяет расширить функциональность без изменения основной логики отбора объекта по дате.

Результат выполнения кода в контексте представления:

{ 'article': <Article: Django Tutorial>, 'comments': [<Comment: Great post>, <Comment: Very helpful>] }

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

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