Menu
CoddyTech

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 %}

challenge icon

챌린지

쉬움

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"]
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

클래스 기반 뷰의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드