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

Класс DayArchiveView

Класс DayArchiveView применяется для отображения архива объектов, отфильтрованных по конкретному дню. Он наследуется от BaseDateArchiveView и предоставляет готовый механизм для работы с датами в URL. Основные параметры класса включают queryset или model для указания источника данных, date_field для задания поля с датой, paginate_by для постраничной навигации и template_name для шаблона. Класс автоматически извлекает год, месяц и день из URL и формирует выборку объектов за указанную дату.

Синтаксис

from django.views.generic.dates import DayArchiveView class MyDayArchiveView(DayArchiveView): model = MyModel date_field = "created_at" allow_empty = False paginate_by = 10 template_name = "myapp/day_archive.html"

Параметры класса

Основные атрибуты для настройки DayArchiveView:

  • model - модель, объекты которой будут отображаться
  • queryset - кастомный набор объектов вместо всей модели
  • date_field - поле модели, содержащее дату (обязательно)
  • allow_empty - разрешать ли пустой список объектов
  • paginate_by - количество объектов на странице
  • template_name - путь к шаблону для отображения

Контекстные переменные

В шаблон передаются следующие переменные:

  • object_list - список объектов за указанный день
  • day - объект даты (datetime.date)
  • previous_day - предыдущий день с данными
  • next_day - следующий день с данными

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

Создадим представление для отображения статей за определенный день:

from django.views.generic.dates import DayArchiveView from myapp.models import Article class ArticleDayArchiveView(DayArchiveView): model = Article date_field = "published_at" allow_empty = True paginate_by = 5 template_name = "myapp/day_archive.html" context_object_name = "articles"

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

Шаблон для отображения архива за день:

<h1>Статьи за {{ day|date:"d.m.Y" }}</h1> {% for article in articles %} <h2>{{ article.title }}</h2> <p>{{ article.content|truncatewords:30 }}</p> <p>Опубликовано: {{ article.published_at|date:"H:i" }}</p> {% empty %} <p>Нет статей за этот день.</p> {% endfor %} <div class="pagination"> {% if previous_day %} <a href="{% url 'day_archive' previous_day.year previous_day.month previous_day.day %}"> ← {{ previous_day|date:"d.m.Y" }} </a> {% endif %} {% if next_day %} <a href="{% url 'day_archive' next_day.year next_day.month next_day.day %}"> {{ next_day|date:"d.m.Y" }} → </a> {% endif %} </div>

Пример . URL-маршрут

Настройка маршрута для представления:

from django.urls import path from myapp.views import ArticleDayArchiveView urlpatterns = [ path( "articles/<int:year>/<int:month>/<int:day>/", ArticleDayArchiveView.as_view(), name="day_archive" ), ]

Пример . С кастомным QuerySet

Фильтрация только опубликованных статей:

from django.views.generic.dates import DayArchiveView from myapp.models import Article class PublishedDayArchiveView(DayArchiveView): queryset = Article.objects.filter(status="published") date_field = "published_at" paginate_by = 10 template_name = "myapp/day_archive.html"

Пример . С переопределением метода get_queryset

Динамическая фильтрация объектов:

from django.views.generic.dates import DayArchiveView from myapp.models import Article class CustomDayArchiveView(DayArchiveView): model = Article date_field = "published_at" paginate_by = 5 def get_queryset(self): qs = super().get_queryset() return qs.filter(category__name="django")

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

Полный пример шаблона с навигацией:

{% extends "base.html" %} {% block content %} <h1>Архив за {{ day|date:"l, d.m.Y" }}</h1> <div class="articles"> {% for article in articles %} <article> <h2><a href="{% url 'article_detail' article.id %}">{{ article.title }}</a></h2> <p>{{ article.content|truncatewords:50 }}</p> <small>{{ article.published_at|timesince }} назад</small> </article> {% empty %} <p>Нет статей за {{ day|date:"d.m.Y" }}</p> {% endfor %} </div> <div class="pagination"> {% if previous_day %} <a href="{% url 'day_archive' previous_day.year previous_day.month previous_day.day %}"> ← {{ previous_day|date:"d.m.Y" }} </a> {% endif %} <span>{{ day|date:"d.m.Y" }}</span> {% if next_day %} <a href="{% url 'day_archive' next_day.year next_day.month next_day.day %}"> {{ next_day|date:"d.m.Y" }} → </a> {% endif %} </div> <div class="page-nav"> {% if page_obj.has_previous %} <a href="?page={{ page_obj.previous_page_number }}">Предыдущая</a> {% endif %} <span>Страница {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}</span> {% if page_obj.has_next %} <a href="?page={{ page_obj.next_page_number }}">Следующая</a> {% endif %} </div> {% endblock %}

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

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