Backend/Django + Bootstrap 개발 일지

9. CBV로 페이지 제작

Fullstacknology 2022. 7. 12. 22:33

  기존에 제작해 놓았던 FBV로 만든것들을 CBV로 다시 만들어보려 한다. MTV 모델에 관한 글과 FBV 와 CBV 에 대한 글을 조만간 올려볼 예정이다. 

 

● CBV로 포스트 목록 페이지 만들기

 

ListView를 이용한 포스트 목록 만들기 

 

  Django 에서 ListView 클래스를 제공해준다. 따라서 이 클래스를 이용하여 더욱 쉽게 구현할 수 있다. PostView 클래스를 ListView 클래스를 상속하고 model 변수 선언후 Post로 초기화 해준다. 

 

 

urls.py 수정

 

  URL의 마지막이 /blog/ 일때 PostList 클래스를 실행하도록 수정한다. 

 

템플릿 파일 지정

 

  Django가 제공해주는 ListView는 파일명 뒤어 _list 가 붙은 html 파일을 기본 템플릿으로 사용하도록 설정되어 있다. 여기서 두 가지 선택지가 있는데 편한대로 선택하면 된다.

 

  1. 기본 _list가 붙은 파일 이름이 싫다면 blog/views.py 파일에서 클래스 맨 아래쪽에 template_name = 'blog/index.html' 추가로 기본 템플릿 사용이 아닌 사용자가 임의로 정해줄 수 있다.

 

   2. 반면에 기본 템플릿을 사용하기로 하였다면 이 방법은 위의 방법보다 더 간단한 방법이다. index.html 파일 이름을 post_list.html 로 수정하고 마무리로 blog/templates/blog/index.html 파일의 for 문을 posts 에서 post_list 로 수정하면 된다. 

 

 

  최신 포스트 부터 정렬하고 싶다면 views.py의 PostList 클래스 마지막 부분에 ordering = '-pk'를 입력하면 된다. 

 

● CBV로 포스트 상세 페이지 만들기 

 

DetailView로 포스트 상세 페이지 만들기

 

  Django 에서 포스트 상세 페이지를 DetailView라는 클래스를 지원해준다. 맨위에 import 한 render는 더이상 필요없으므로 주석처리 한다. 

 

 

urls.py 수정 

 

 

 

템플릿 파일 지정

 

  간단하게 기존의 single_post_page.html의 파일이름을 post_detail.html 로 수정한다.