반응형
Generic date views 란?
Django의 클래스 기반 뷰는 다양한 유형의 뷰를 최소한의 코드로 처리할 수 있도록 도와주는데, 그 중에서 Generic date views는 날짜 기반 데이터를 효율적으로 관리하고 표시하는데 많은 도움을 준다.
블로그, 뉴스, 웹사이트에서 날짜별로 콘텐츠를 정리하는데 유용하며 아래와 같은 기능들이 있다.
- ArchiveIndexView: 날짜 필드를 기준으로 정렬된 객체 목록을 표시
- YearArchiveView: 특정 연도의 객체를 표시
- MonthArchiveView: 특정 연도의 특정 월에 해당하는 객체를 표시
- WeekArchiveView: 특정 연도의 특정 월의 특정일에 해당하는 객체를 표시
- DayArchiveView: 특정 연도의 특정 월의 특정일에 해당하는 객체를 표시
- TodayArchiveView: 현재 날짜의 객체를 표시
- DateDetailView: 연도, 월, 일, 고유 식별자를 기준으로 단일 객체를 표시
공통 옵션
- allow_future (디폴트 : False)
- False : 조회 조건에서 지정 필드의 현재 날짜 이후 레코드에서 제외
- allow_empty (디폴트 : False)
- False : 빈 리스트에서는 404 응답
- paginate_by (디폴트: None)
- 페이징 크기
사용 예시
from django.views.generic.dates import (사용할 view)
ArchiveIndexView
# views.py
from django.views.generic.dates import ArchiveIndexView
from .models import Song
class SongArchiveIndexView(ArchiveIndexView):
model = Song
date_field = "release_date"
paginate_by = 10 # 더 나은 사용성을 위한 페이지네이션
# urls.py
urlpatterns = [
path('archives/', SongArchiveIndexView.as_view(), name='song_archive_index'),
]
YearArchiveView
# views.py
from django.views.generic.dates import YearArchiveView
class SongYearArchiveView(YearArchiveView):
model = Song
date_field = "release_date"
make_object_list = True # 컨텍스트에 객체 목록 포함
# urls.py
urlpatterns += [
path('archives/<int:year>/', SongYearArchiveView.as_view(), name='song_archive_year'),
]
MonthArchiveView
# views.py
from django.views.generic.dates import MonthArchiveView
class SongMonthArchiveView(MonthArchiveView):
model = Song
date_field = "release_date"
# urls.py
urlpatterns += [
path('archives/<int:year>/<int:month>/', SongMonthArchiveView.as_view(), name='song_archive_month'),
]
WeekArchiveView
# views.py
from django.views.generic.dates import WeekArchiveView
class SongWeekArchiveView(WeekArchiveView):
model = Song
date_field = "release_date"
week_format = "%U" # 주 형식 지정 (예: "%U"는 0부터 시작하는 주 번호)
# urls.py
urlpatterns += [
path('archives/<int:year>/week/<int:week>/', SongWeekArchiveView.as_view(), name='song_archive_week'),
]
DayArchiveView
# views.py
from django.views.generic.dates import DayArchiveView
class SongDayArchiveView(DayArchiveView):
model = Song
date_field = "release_date"
# urls.py
urlpatterns += [
path('archives/<int:year>/<int:month>/<int:day>/', SongDayArchiveView.as_view(), name='song_archive_day'),
]
TodayArchiveView
# views.py
from django.views.generic.dates import TodayArchiveView
class SongTodayArchiveView(TodayArchiveView):
model = Song
date_field = "release_date"
# urls.py
urlpatterns += [
path('archives/today/', SongTodayArchiveView.as_view(), name='song_archive_today'),
]
DateDetailView
# views.py
from django.views.generic.dates import DateDetailView
class SongDateDetailView(DateDetailView):
model = Song
date_field = "release_date"
slug_field = "slug" # 고유 식별자 필드
slug_url_kwarg = "slug" # URL에서 식별자를 추출하는 키워드 인자
# urls.py
urlpatterns += [
path('archives/<int:year>/<int:month>/<int:day>/<slug:slug>/', SongDateDetailView.as_view(), name='song_detail'),
]
반응형
'Django > DRF' 카테고리의 다른 글
[Django] Bulk Operations에 대해서 (0) | 2024.07.03 |
---|---|
[Django] 모델 기본 필드 이해하기 (1) | 2024.06.18 |
[Django] django_extensions (0) | 2024.06.17 |
[Django] URL Reverse를 통한 URL 작성 (0) | 2024.06.17 |
[Django] Django에서 Slug란? (0) | 2024.06.17 |