티스토리 뷰

반응형

Django - 뷰 (list view, detail view) 

 

먼저 기본적인 뷰 function 의 경우, 모델로 만들어진 모든 objects 를 불러서 render() 함수를 호출하고 특정템플릿에 list 를 함께 보내준다. 이런 일련의 작업들을 class-based generic list-view(ListView) 를 사용해서 간단하게 처리할 수 있다. function view 가 있지만 class-based view를 사용하는 이유는 코드의 양과 반복을 줄이고, 향후에 유지보수를 쉽게 할 수 있기 때문이다. 

 

리스트뷰 만들기 

- 이 코드로 모든 작업이 끝이다. Book 모델에 있는 모든 레코드를 가져와서 렌터링하고 템플릿을 호출하고 리스트를 함께 보내는 기능을 한다. 사용자가 원한다면, context 이름, queryset, template 이름을 직접 지정할 수도 있다. 

 

클래스에서 사용하는 메소드 또한 오버라이딩 가능하다. 

 

get_queryset() 메소드를 사용해서 반환되는 레코드를 변경할수 있다. 위에서 처럼 queryset 을 통해서 할수도 있지만, 더 유연한 방법으로 메소드를 이용할 수 있다. 

 

또한, 사용자가 원하는 context 를 추가해서 보낼수도 있다. ( get_context_data() ) 

 

  - 슈퍼클래스에서 기존컨텍스트를 호출

  - 사용자 데이터를 추가

 

이외에 좀더 많은 예제를 원하면 Django 공식 문서를 참고하세요. 

 

https://docs.djangoproject.com/en/3.0/topics/class-based-views/generic-display/

 

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

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

상세 클라스 만들기 ( Class based detail view ) 

 

상세 클라스 뷰는 모델의 특정 레코드에 대한 상세 정보를 보여줄때 편리하게 사용되는 뷰이다. 기본 사용법은 다음과 같다. 

- template : templates/catalog/book_detail.html

- context : object or book (모델명)

 

리스트 뷰와 마찬가지로 context object 에 대한 이름을 바꿀수 있으며, context 에 정보를 추가하는 것 또한 가능하다. 

 

만일 요청 레코드가 존재하지 않는다면 ??? 

 

클래스 뷰에서는 레코드가 존재하지 않으면 Http404 exception 이 발생한다. 

 

클래스 뷰가 아닌 function 뷰인 경우, 레코드가 없다면 exception 처리를 해주어야 한다. 

이를 간단하게 하기 위해서 클래스뷰와 같이 function뷰에서도 유사한 기능을 제공한다. - get_object_or_404

 

상세페이지에 대한 템플릿

 

만일, catalog 애플리케이션의 Book 모델을 위한 상세 뷰를 작성한다면 /templates/catalog/book_detail.html

 

 

 

끝. 

댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함