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