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"]를 지정하면 가장 오래 걸리는 레시피가 먼저 표시됩니다. 지정하지 않으면 행은 데이터베이스의 순서대로 표시됩니다.
챌린지
쉬움채용 공고 페이지를 추가하세요. 해당 템플릿인 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 플레이그라운드