#15. Классы представлений: ListView, DetailView, CreateView | Django уроки

YOUTUBE · 19.11.2025 07:31

Ключевые темы и таймкоды

Введение в классы представлений

0:00
  • Обсуждение использования классов представлений вместо функций для обработки запросов.
  • Преимущества объектно-ориентированного подхода: упрощение кода и улучшение читаемости.
  • Рекомендация ознакомиться с русскоязычной документацией.

Обзор базовых классов представлений

0:59
  • Список базовых классов представлений, на основе которых создаются собственные классы.
  • Упоминание о документации по Django 1.10 и 3.0.

Создание класса представления для главной страницы

1:58
  • Импорт класса ListView для создания списка статей.
  • Создание класса Home, который будет отвечать за главную страницу сайта.
  • Настройка атрибута model для ссылки на модель статей.

Подключение класса представления к маршруту

2:56
  • Замена функции index на класс Home в маршрутах.
  • Использование функции s-view для привязки класса к маршруту.

Исправление ошибок с шаблоном

4:13
  • Ошибка из-за отсутствия шаблона по умолчанию.
  • Настройка атрибута template_name для использования шаблона index.html.

Работа с коллекциями в шаблоне

5:12
  • Проблема с использованием коллекции posts в шаблоне.
  • Замена posts на object_list для корректного отображения статей.
  • Явное указание переменной posts через атрибут context_object_name.

Передача динамических данных в шаблон

7:15
  • Создание функции для формирования динамического контекста.
  • Передача списка меню через параметр menu.
  • Проверка работы динамического контекста на главной странице.

Настройка выбора категорий

10:11
  • Передача параметра as_selector для выбора всех категорий.
  • Обновление страницы для отображения выбранных категорий.

Фильтрация статей по публикации

11:09
  • Определение метода get_query_set для фильтрации статей по полю is_published.
  • Проверка работы метода на примере изменения статуса статей в админ-панели.

Заключение

12:09
  • Подведение итогов: использование метода get_query_set для выбора статей из модели.
  • Повторение процесса привязки класса представления к маршруту с помощью метода s-view.

Создание класса для отображения категорий

12:37
  • Наследование от базового класса ListView.
  • Связывание модели с шаблоном.
  • Переопределение метода get_queryset для выбора записей по категории.

Работа с параметрами маршрута

13:34
  • Использование переменной slug в маршруте.
  • Получение параметров маршрута через словарь kwargs.
  • Выбор записей, соответствующих категории по slug.

Проверка условий отображения

14:34
  • Проверка условия публикации статьи.
  • Объяснение параметра _slug в модели.

Привязка класса к маршруту

15:33
  • Замена функции show_category на class_view_category.
  • Исправление ошибки с параметром slug в маршруте.

Добавление заголовков и меню

16:33
  • Формирование контекста данных для заголовков.
  • Добавление заголовков для категорий и меню.

Обработка ошибок

17:31
  • Обработка ошибки list index out of range.
  • Генерация исключения 404 при отсутствии записей.

Создание класса для отображения отдельного поста

19:28
  • Наследование от DetailView.
  • Использование шаблона post_html.
  • Привязка класса к маршруту через переменную post_slug.

Исправление ошибок в классе DetailView

21:17
  • Исправление ошибки, связанной с использованием неправильной переменной.
  • Определение атрибута slug_url_kwarg для корректного использования slug.

Передача данных в шаблон

23:16
  • Определение атрибута context_object для передачи данных в шаблон.
  • Проверка отображения статьи и исключения 404 при несуществующем slug.

Добавление главного меню и заголовков

23:16
  • Передача списка главного меню и заголовков в контекст.
  • Проверка отображения главного меню и заголовков.

Создание класса для работы с формой

24:11
  • Импортируем класс `CreedView` и создаём собственный класс на его основе.
  • Указываем атрибут `form_class`, который связывает класс представления с классом формы `PostForm`.
  • Подключаем шаблон для формы через атрибут `template`.

Настройка маршрута и добавление меню

25:10
  • Связываем класс с маршрутом через метод `get_context_data`.
  • Добавляем главное меню и заголовок для вкладки.
  • Проверяем отображение формы на странице.

Преимущества классов представлений

26:09
  • Классы представлений позволяют писать код компактнее, чем функции.
  • Демонстрируем добавление новой статьи через форму.

Перенаправление при добавлении статьи

27:01
  • Django использует метод `get_absolute_url` для определения маршрута при добавлении статьи.
  • Если метод `get_absolute_url` не прописан, указываем атрибут `redirect_url` с адресом маршрута.
  • Используем функцию `reverse_lazy` для безопасного построения маршрута.

Заключение

28:57
  • Подводим итоги создания классов `CreedView`, `DetailsView` и `ListView`.
  • Отмечаем, что рассмотрели лишь основные принципы работы классов представлений.
  • Рекомендуем обратиться к официальной документации для более подробной информации.