📝 Django

Class-Based Views в Django

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
79
🌿
Уровень
Средний
🐦 💼 ✈️

CBV — классы вместо функций. Встроенные CBV реализуют типовые паттерны CRUD.

ListView

# views.py
from django.views.generic import ListView
from .models import Task

class TaskListView(ListView):
    model = Task
    template_name = 'tasks/list.html'   # по умолчанию: tasks/task_list.html
    context_object_name = 'tasks'        # имя переменной в шаблоне
    paginate_by = 10                     # пагинация

    def get_queryset(self):
        return Task.objects.filter(status='todo').order_by('-created_at')
# urls.py
path('', TaskListView.as_view(), name='task-list'),

DetailView

from django.views.generic import DetailView

class TaskDetailView(DetailView):
    model = Task
    template_name = 'tasks/detail.html'
    context_object_name = 'task'
    pk_url_kwarg = 'pk'   # имя параметра в URL

CreateView

from django.views.generic.edit import CreateView
from django.urls import reverse_lazy

class TaskCreateView(CreateView):
    model = Task
    fields = ['title', 'description', 'status', 'priority']
    template_name = 'tasks/form.html'
    success_url = reverse_lazy('task-list')

Шаблон должен содержать {{ form }} и {% csrf_token %}.

UpdateView

from django.views.generic.edit import UpdateView

class TaskUpdateView(UpdateView):
    model = Task
    fields = ['title', 'description', 'status']
    template_name = 'tasks/form.html'
    success_url = reverse_lazy('task-list')

DeleteView

from django.views.generic.edit import DeleteView

class TaskDeleteView(DeleteView):
    model = Task
    template_name = 'tasks/confirm_delete.html'
    success_url = reverse_lazy('task-list')

URL для всех CBV

urlpatterns = [
    path('', TaskListView.as_view(), name='task-list'),
    path('<int:pk>/', TaskDetailView.as_view(), name='task-detail'),
    path('create/', TaskCreateView.as_view(), name='task-create'),
    path('<int:pk>/edit/', TaskUpdateView.as_view(), name='task-edit'),
    path('<int:pk>/delete/', TaskDeleteView.as_view(), name='task-delete'),
]

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Event loop в Python: как asyncio делает «параллел…

Event loop — сердце asyncio. Он не запускает код параллельно в нескольких потоках. Он переключается...

📅 30.06.2026 👁️ 122
📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 131
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 81

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!