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

Класс MonthArchiveView

Класс MonthArchiveView применяется для создания страниц архива, которые показывают все объекты, относящиеся к конкретному месяцу и году. Он наследуется от BaseArchiveView и предоставляет удобный способ фильтрации объектов по дате с разбивкой по месяцам. Основные параметры конфигурации: queryset или model для указания набора объектов, date_field для указания поля с датой и template_name для шаблона.

Синтаксис

from django.views.generic.dates import MonthArchiveView from myapp.models import Article class ArticleMonthArchiveView(MonthArchiveView): model = Article date_field = "created_at" month_format = "%m" template_name = "articles/month_archive.html" context_object_name = "article_list" paginate_by = 10

Пример

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

from django.views.generic.dates import MonthArchiveView from myapp.models import Article class ArticleMonthArchiveView(MonthArchiveView): model = Article date_field = "published_at" year_format = "%Y" month_format = "%m" template_name = "articles/month_archive.html" context_object_name = "articles" paginate_by = 5

Пример

Добавим URL маршрут для нашего представления:

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

Пример

Теперь перейдем по URL '/articles/2026/09/' и получим список статей, опубликованных в сентябре 2026 года. В шаблоне мы можем использовать переданные переменные:

<h1>Articles for {{ month|date:"F Y" }}</h1> <ul> {% for article in articles %} <li>{{ article.title }} - {{ article.published_at|date:"d.m.Y" }}</li> {% empty %} <li>No articles for this month.</li> {% endfor %} </ul> <p>Previous month: {{ previous_month }}</p> <p>Next month: {{ next_month }}</p>

Пример

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

from django.views.generic.dates import MonthArchiveView from myapp.models import Article class PublishedMonthArchiveView(MonthArchiveView): model = Article date_field = "published_at" year_format = "%Y" month_format = "%m" template_name = "articles/month_archive.html" context_object_name = "articles" allow_empty = False def get_queryset(self): queryset = super().get_queryset() return queryset.filter(status="published")

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

[<Article: Django Basics>, <Article: Advanced Models>, <Article: Views in Django>]

Пример

Настроим представление с дополнительными параметрами для более гибкого отображения:

from django.views.generic.dates import MonthArchiveView from myapp.models import Article class CustomMonthArchiveView(MonthArchiveView): queryset = Article.objects.filter(status="published") date_field = "published_at" month_format = "%m" year_format = "%Y" template_name = "articles/custom_month_archive.html" context_object_name = "items" paginate_by = 15 allow_future = False allow_empty = True template_name_suffix = "_archive"

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

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