view를 작성하는 방법은 크게 FBV(Function based view)와 CBV(Class based view)가 있습니다. 우리는 지금까지 함수 기반으로 view파일을 작성하였습니다.

이번시간에는 CBV를 살펴볼 것입니다. 장고가 기본적으로 많이 사용하는 것들을 class로 구현해놓았고, 여러분은 복잡한 코드 없이도 이것을 사용하여 view 파일을 손쉽게 만들 수 있습니다.

하지만 CBV가 자동화가 되고 자유도가 떨어지는 만큼 여러분 프로젝트에 맞는 것을 사용하시는 것이 좋습니다. CBV는 제네릭 뷰라고도 얘기합니다.

<aside> 👉 이번 실습은 c 앱에서 해보도록 하겠습니다.

</aside>

# c앱에 views.py

from django.shortcuts import render
from django.views.generic import ListView
from b.models import Blog

# def indexC(request):
#     return render(request, 'indexC.html')

class BlogList(ListView): #여기서 class명은 상관이 없습니다.
    model = Blog
    template_name = 'indexC.html'
# urls.py

from c.views import BlogList

urlpatterns = [
    #.. 중략 ..
    # path('cc/', indexC),
    path('cc/', BlogList.as_view()),
    #.. 중략 ..

여기서 blog_list는 models.py에 class 명에 따라 변경됩니다.

# indexC.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>hello world C</h1>
    {% for i in blog_list %}
        <h1>{{ i.title }}</h1>
        <p>{{ i.contents }}</p>
    {% endfor %}
</body>
</html>

수정을 좀 더 해보도록 하겠습니다.

# c앱에 views.py

from django.shortcuts import render
from django.views.generic import ListView
from b.models import Blog

# def indexC(request):
#     return render(request, 'indexC.html')

class BlogList(ListView):
    model = Blog
    template_name = 'indexC.html'
    ordering = '-pk'

지금까지 진행했던 상세 옵션들은 어디에 구현되어 있을까요? 아래 공식 Django 소스를 참고하세요.

django/django

좀 더 다양한 활용법을 배우시고 싶다면 공식 홈페이지에 API reference를 참고하세요.

Built-in class-based views API | Django documentation | Django