Menu
CoddyTech

ListView

Coddy Django 여정의 클래스 기반 뷰 섹션에 포함된 레슨. 18개 중 4번째.

게시판에는 모든 작업을 나열하는 페이지가 필요합니다. 테이블의 행 목록은 아주 흔한 기능이라 Django에서 뷰를 제공해 줍니다. 바로 ListView입니다. 모델을 지정하면 행을 조회하고 그 행이 담긴 템플릿을 렌더링합니다. 앱 recipes에 있는 레시피 사이트의 목록은 다음과 같습니다.

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # 가장 빨리 만들 수 있는 것부터

template_name을 지정하지 않으면 recipes/recipe_list.html을 렌더링합니다. 이 이름은 앱 레이블, 소문자로 쓴 모델 이름, 그리고 _list.html 순서로 구성됩니다. 템플릿에는 행이 항상 object_list라는 이름으로 전달됩니다. 또한 recipe_list라는 이름으로도 전달되며, context_object_name을 지정하면 대신 그 이름으로 전달됩니다.

ordering에는 order_by()에 지정할 수 있는 값을 사용할 수 있으므로, ["-minutes"]를 지정하면 조리 시간이 가장 긴 레시피가 먼저 표시됩니다. 지정하지 않으면 행은 데이터베이스의 순서대로 표시됩니다.

challenge icon

챌린지

쉬움

준비된 템플릿 jobs/job_list.html을 사용해 jobs를 반복해서 보여 주는 채용 공고 페이지를 추가하세요.

  1. jobs/views.py에 Job의 ListView인 JobListView를 추가하세요. 목록의 이름은 jobs로 지정하고, 가장 최신 posted 날짜가 먼저 오도록 정렬하며 기본 템플릿을 그대로 사용하세요.
  2. jobs/urls.py에 이름이 list인 "jobs/" 경로를 추가하세요.

/jobs/를 여세요. Python Developer가 맨 앞에 있고 Technical Writer가 맨 마지막에 있습니다.

직접 해보기

from django.views.generic import 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"

클래스 기반 뷰의 모든 레슨

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