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)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!