Django 프론트& 백엔드 개발

Django Paginator 사용 정리

Data Jun 2026. 1. 16. 18:27

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를 구성하면 됩니다.