Django에서 게시글 목록이나 데이터 리스트를 페이지 단위로 나누고 싶을 때
Paginator 클래스를 사용하면 매우 간단하게 구현할 수 있습니다.
이번에는 Django shell 환경에서 Paginator를 직접 다뤄보며 핵심 메서드들을 확인해보겠습니다.
1. Paginator 객체 생성
# Django 쉘
python manage.py shell
# posts App의 Post 모델 로드
from posts.modesl import Post
# Paginator 로드
from django.core.paginator import Paginator
# Post model의 데이터 posts에 저장
posts = Post.objects.all()
# pages 객체 생성
pages = Paginator(posts, 5)
# posts : QuerySet 또는 리스트 형태의 데이터
# 5 : 한 페이지당 보여줄 객체 수
# → 즉, 한 페이지에 게시글 5개씩 나누는 설정입니다.
2. 전체 페이지 범위 확인
pages.page_range
# 전체 페이지 번호를 iterable 형태로 반환
# 템플릿에서 페이지 버튼을 만들 때 자주 사용됩니다.
3. 특정 페이지 가져오기
page = pages.page(1)
# 1번 페이지(Page 객체)를 반환
#이후 실제 데이터나 페이지 상태 정보는 이 page 객체를 통해 접근합니다.
4. 현재 페이지의 데이터 확인
page.object_list
# 해당 페이지에 포함된 실제 데이터 목록
# QuerySet 또는 리스트 형태로 반환됩니다.
5. 다음 / 이전 페이지 존재 여부
page.has_next()
page.has_previous()
# 다음 페이지 또는 이전 페이지가 있는지 Boolean 값으로 반환
# 페이지 네비게이션 처리 시 필수적으로 사용됩니다.
6. 다음 페이지 번호 가져오기
page.next_page_number()
# 다음 페이지가 있을 경우 해당 페이지 번호 반환
# has_next()와 함께 사용하는 것이 안전합니다.
7. 정리하면
- Paginator : 전체 데이터를 페이지 단위로 분리
- Page 객체 : 특정 페이지의 데이터 + 상태 정보 관리
- Shell에서 직접 확인해보면 템플릿 로직 이해가 훨씬 쉬워집니다
실제 서비스에서는 이 로직을 View에서 처리하고,
템플릿에서는 page.object_list, has_next, page_range 등을 활용해 UI를 구성하면 됩니다.
'Django 프론트& 백엔드 개발' 카테고리의 다른 글
| href='?page=2'가 현재 경로를 유지하는 이유 (0) | 2026.01.17 |
|---|---|
| GET 메서드에서 경로 스트링과 쿼리 스트링을 사용하는 이유 (0) | 2026.01.17 |
| 유효성 검증을 뒤늦게 추가했을 경우 - Django 유효성 검증 로직 추가 (0) | 2026.01.14 |
| Django 더미 데이터 생성 – django-seed 사용 및 주의점 (0) | 2026.01.14 |
| Django에서 서버 에러 대신 404로 응답하기: get_object_or_404 사용 이유 (0) | 2026.01.13 |