본문 바로가기

웹/Django

Django 5. 클래스 뷰

1.urlpatterns 에 등록

클래스 뷰를 등록하고 싶으면 as_view() 로 urlpatterns 에 등록을 해야 한다.

urlpatterns = [

     path('about/', someMyView.as_view()),

]

a. as_view() 

as_view() 는 진입 메소드이다. 진입 메소드는 인스턴스를 생성하고 

인스턴스의 dispatch() 메소드를 호출한다. 

dispatch() 는 요청을 검사해서 GET,POST 등의 HTTP 메소드 형식을 식별하고 해당이름을 갖는 메소드로 요청을 한다.

만약 해당 메소드가 없다면 HttpResponseNotAllowed 예외가 발생한다.

예를 들어 위와 같은 urlpatterns 에 등록된게 있다고 하자

 

2.view 에서의 사용

클래스 뷰는 특징이 있다.

a. TemplateView 

from django.views.generic.base import TemplateView 으로 import 를 한다.

template_name 클래스 변수를 오버라이딩하여 지정해줘야 된다. 

이는 넘길 템플렛을 지정하는 것이다. template_name = 'someTemp.html'

템플릿 시스템으로 넘겨줄 컨텍스트 변수가 있는 경우에는 get_context_data() 메소드를 오버라이딩 해서 정의 해줘야 한다.

1
2
3
4
def get_context_data(self**kwargs):
    context = super().get_context_data(**kwargs)
    context['model_list'= ['Book','Author','Publisher']
    return context
cs

2행 : get_context_data() 를 재정의 할 때에는 super() 메소드를 호출해야 한다.

b.ListVIew

리스트 뷰는 컨텍스트 변수로 템플릿 시스템에 넘겨주면 ListView가 생성된다.

만약 모든 레코드를 지정하는 경우에는 모델 클래스명만 지정해주면 된다.

1
2
class BookList(ListView):
    model = Book
cs

명시적으로 지정하지 않아도 장고에서 알아서 지정해주는 속성이 2개 있다. 

컨텍스트 변수로 object_list 를 기본적으로 사용하고 

템플릿 파일 명을 모델명 소문자.html 로 지정해준다.

 

c.DetailView 

만일 테이블에서 pk로 조회 해서 특정 객체를 가져오는 경우에는 모델 클래스명만 지정해주면 된다. 

조회시 사용할 pk 값은 URLconf 에서 추출해 뷰로 넘어온 파라미터이다.

명시적으로 지정하지 않아도 컨텍스트 변수로 object를 사용하고

템플릿 파일을 모델명 소문자.html 로 지정해준다.