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를 반복합니다.

  • jobs/views.py에서 Job의 ListView인 JobListView를 만들고, 목록 이름은 jobs로 지정하며 최신 posted 날짜가 먼저 오도록 하세요. 기본 템플릿을 유지하세요.
  • jobs/urls.py에서 "jobs/" 경로의 이름을 list로 지정하세요.

Run을 누르고 /jobs/를 여세요.

직접 해보기

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 플레이그라운드