Для одной статьи подходит Django DetailView: задайте model, template_name и context_object_name, а в маршруте передайте pk. При отсутствии объекта view вернёт 404.
Определение подходящего generic‑view для вывода статьи
Для одной статьи подходит Django DetailView: задайте model, template_name и context_object_name, а в маршруте передайте pk. При отсутствии объекта view вернёт 404.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется решить, какой generic‑view следует задействовать для отображения отдельной статьи по её идентификатору и передачи нужных данных в шаблон.
# views.py
# TODO: выбрать подходящую generic‑view (например, DetailView) для отображения Article
Ответ
Для одной статьи подходит Django DetailView: задайте model, template_name и context_object_name, а в маршруте передайте pk. При отсутствии объекта view вернёт 404.
Минимальный пример:
from django.views.generic import DetailView
from django.urls import path
from .models import Article
class ArticleDetailView(DetailView):
model = Article
template_name = 'articles/detail.html'
context_object_name = 'article'
urlpatterns = [
path('articles/<int:pk>/', ArticleDetailView.as_view()),
]
В шаблоне доступен article. Для дополнительных данных переопределяют get_context_data с вызовом super(). Для закрытых или неопубликованных статей ограничьте get_queryset и права доступа: сам DetailView не делает все записи публично допустимыми.
Источник: docs.djangoproject.com.