[KT AIVLE 4기] Django - 장고 View

장고 뷰 : 제네릭 뷰

16주차 오정임 강사님의 장고 4일차 수업 주제는 “장고 View” 이다.

제네릭뷰는 장고에서 범용적으로 사용되는 기능을 구현해 놓은 View 클래스이다.

제네릭뷰를 상속해서 속성과 메소드를 오버라이딩하여 커스터마이징할 수 있다.


🧩 제네릭뷰

앞에서는 View를 함수로 정의했지만, 클래스로도 정의할 수 있다.

클래스 정의가 쉽도록 제네릭 뷰를 사용해서 사용한다.

사용 방법은 두 가지이다. (1) urls.py에서 바로 쓰거나 (2) view.py에서 재정의하거나

1. as_view() 메소드

속성 변경할게 많지 않을 때, View 클래스 재정의를 하지 않고 urls.py에서 **initkwargs로 Model을 줘서 바로 사용한다.

""" urls.py """

from django.views.generic import ListView
from .models import Book

app_name = 'book' 

urlpatterns = [ 
               path('', ListView.as_view(model=Book), name='list'),
]

**ListView의 기본 템플릿명은** 앱 명/모델명 소문자_list.html, 기본 컨텍스트는 모델명 소문자_list</span>

<!-- book/book_list.html -->

{% for book in book_list %}
    <a href="{% url 'book:detail' book.id %}"> {{book.title}}</a><br>
{% endfor %}

2. 제네릭뷰를 상속받은 클래스 정의

속성 변경할게 많을 때, 제네릭뷰를 상속받아 클래스를 재정의한다.

이때, 제네릭뷰의 종류는 다양하고, 각 속성이 다르기 때문에 ccbv 다큐먼트를 참고해야한다.

""" views.py """

from django.views.generic import ListView

class MyView(ListView):
    model = Book

""" urls.py """
from .views import Myview


app_name = 'book' 

urlpatterns = [ 
               path('', Myview(), name='list'),
]

이하 같다.


소감

이전 시간까지는 views.py에서 서비스 처리 코드를 엄청 달아줬는데,

오늘 배운 장고 제네릭뷰를 이용하면 urls.py에서 클래스 재정의 없이 바로 서비스 처리가 가능했다.

이전 실습에서 함수 형태로 view를 구현했는데, 오늘은 간단한 클래스 선언으로 서비스 처리가 되어서 기분이 좋았다! 🙂

Categories:

Updated:

Leave a comment