📝 Django

Class-Based Views в Django

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

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)

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

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

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

🔗 Похожие

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

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

📝

Q-объекты в Django ORM

Q-объекты позволяют строить сложные условия с OR, AND, NOT.

📅 30.06.2026 👁️ 291
📝

Поиск в Django

Поиск в Django можно начать с простых ORM-фильтров, а для ранжирования и полнотекстового поиска использовать...

📅 30.06.2026 👁️ 280
📝

Swagger документация с drf-spectacular

drf-spectacular генерирует OpenAPI 3.0 схему и Swagger UI для DRF.

📅 30.06.2026 👁️ 565

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

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