DetailView
Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 5번째.
각 작업에는 자체 페이지가 필요합니다. 행을 찾고, 표시하고, 해당 행이 없으면 404로 응답합니다. 이것이 DetailView입니다. 레시피 사이트에서는 다음과 같습니다.
class RecipeDetailView(DetailView):
model = Recipe
# urls.py
path("recipes/<int:pk>/", views.RecipeDetailView.as_view(), name="recipe")DetailView는 URL 인수 pk에서 행의 기본 키를 읽고, get_object_or_404()와 같은 방식으로 행을 조회합니다. 기본 템플릿은 recipes/recipe_detail.html이며, 행은 object와 recipe로 전달됩니다.
pk라는 이름이 중요합니다. <int:id>로 작성된 경로는 뷰가 찾지 않는 인수를 전달하므로, 객체의 pk 또는 슬러그를 요청하는 AttributeError와 함께 페이지에서 오류가 발생합니다.
링크는 행의 pk를 경로 이름에 전달합니다. {% url 'recipes:recipe' recipe.pk %}
챌린지
쉬움jobs/job_detail.html 템플릿이 준비되었습니다. 각 채용 공고에 개별 페이지를 만드세요.
jobs/views.py에Job의DetailView인JobDetailView를 추가하세요.jobs/urls.py에"jobs/<int:pk>/"경로를detail이라는 이름으로 추가하세요.job_list.html에서 각 채용 공고의 제목을 해당 페이지로 연결되는 링크로 만드세요.
Run을 누르고 /jobs/를 연 다음 제목을 클릭하세요.
직접 해보기
from django.views.generic import ListView, TemplateView
from .models import Job
class HomeView(TemplateView):
template_name = "jobs/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["count"] = Job.objects.count()
context["latest"] = Job.objects.order_by("-posted").first()
return context
class AboutView(TemplateView):
template_name = "jobs/about.html"
class JobListView(ListView):
model = Job
context_object_name = "jobs"
ordering = ["-posted"]
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
클래스 기반 뷰의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드