Django - blog 만들기 4 (views.py)

yunseul·2024년 6월 17일

Django

목록 보기
13/30

views.py

### 위치 이동
cd /Users/user/test/django/project/web/blog

### views.py
vi views.py

---

from django.views.generic import ListView, DetailView
from django.views.generic.dates import ArchiveIndexView, YearArchiveView, MonthArchiveView
from django.views.generic.dates import DayArchiveView, TodayArchiveView

from blog.models import Post

#--- ListView
class PostLV(ListView) :
    model = Post
    template_name = 'blog/post_all.html'
    context_object_name = 'posts'
    paginate_by = 2

#--- DetailView
class PostDV(DetailView) : 
    model = Post

#--- ArchiveView
class PostAV(ArchiveIndexView) :
    model = Post                                                    
    date_field = 'modify_date'

class PostYAV(YearArchiveView) :
    model = Post
    date_field = 'modify_date'
    make_object_list = True

class PostMAV(MonthArchiveView) :
    model = Post
    date_field = 'modify_date'

class PostDAV(DayArchiveView) :
    model = Post
    date_field = 'modify_date'

class PostTAV(TodayArchiveView) :
    model = Post
    date_field = 'modify_date'
  • from django.views.generic.dates import DqyArchiveView, TodayArchiveView : view 작성에 필요한 클래스형 generic view 를 import
  • from blog.models import Post : 테이블 조회를 위해 Post 모델 클래스를 import
  • class PostLV(ListView) : ListView 제네릭 뷰를 상속받아 PostLV 클래스형 뷰를 정의하고, ListView 제네릭 뷰는 테이블로부터 객체 리스트를 가져와 그 리스트를 출력함
  • model = Post : PostLV 클래스의 대상 테이블은 Post 테이블
  • template_name = 'blog/post_all.html' : 템플릿 파일은 'blog/post_all.html' 로 지정, 혹시 지정하지 않는다면 default 템플릿 파일명은 'blog/post_list/html
  • context_object_name = 'posts' : 템플릿 파일로 넘겨주는 객체 리스트에 대한 컨텍스트 변수명을 'posts' 로 지정
  • paginate_by = 2 : 한 페이지에서 보여주는 객체 리스트의 숫자는 2 이며, paginate_by 속성을 사용하는 것으로 장고의 페이지 기능 사용 가능
  • class PostDV(DetailView) : DetailView 제네릭 뷰를 상속받아 PostDV 클래스형 뷰를 정의하고, DetailView 제네릭 뷰는 테이블로부터 특정 개체를 가져와 그 객체의 상세 정보를 출력 ( 테이블에서 특정 객체를 조회하기 위한 키는 기본 키 대신 slug 속성을 사용하며, 해당 slug 파라미터는 URLconf 에서 추출하여 뷰로 넘겨줌 )
  • model = Post : PostDV 클래스의 대상 테이블은 Post 테이블이며 다른 속성들을 지정하지 않았으므로 디폴트 값을 사용
  • class PostAV(ArchiveView) : ArchiveIndexView 제네릭 뷰를 상속받아 PostAV 클래스형 뷰를 정의하고, ArchiveIndexView 제네릭뷰는 테이블로부터 객체 리스트를 가져와 날짜 필드를 기준으로 최신 객체를 먼저 출력
  • date_field = 'modify_date' : 기준이 되는 날짜 필드는 'modify_date' 컬럼을 사용하는 것으로 변경 날짜가 최근인 포스트를 먼저 출력
  • class PostYAV(YearArchiveView) : ArchiveIndexView 제네릭 뷰를 상속받아 PostAV 클래스형 뷰를 정의하고, ArchiveIndexView 제네릭뷰는 테이블로부터 날짜 필드의 연도를 ㅣ준으로 객체 리스트를 가져와 그 객체들이 속한 월을 리스트로 출력 ( 날짜 필드의 연도 파라미터는 URLconf 에서 추출하여 뷰로 넘겨줌 )
  • model = Post : PostYAV 클래스의 대상 테이블은 Post 테이블
  • make_object_list = True : make_object_list 속성이 True 이면, 해당 년도에 해당하는 객체의 리스트를 만들어 템플릿에 넘겨줌, 즉 템플릿 파일에서 object_list 컨텍스트 변수를 사용 가능 ( default 는 false )

참고 자료

profile
새로운 것을 시도하고 도전하는 것을 좋아하는 Engineer 입니다..

0개의 댓글