기술블로그-Django편

📘 Django 페이지네이션: 점(...) 생략 표시 조건 완전 정복

Chansman 2025. 5. 7. 17:36

📘 Django 페이지네이션: 점(...) 생략 표시 조건 완전 정복


Django의 Paginator를 사용할 때, 페이지가 많아지면 숫자를 모두 보여주지 않고 ... 으로 생략 처리하는 경우가 많습니다.
이번에는 앞쪽 생략 ...과 뒤쪽 생략 ... 조건 로직을 하나하나 뜯어보며 이해해봅니다.


🔹 앞쪽 생략 점(...) 처리 로직

{% if page_object.number|add:-2 > 1 %}
    <a href="?page={{ page_object.number|add:-3 }}">&hellip;</a>
{% endif %}

✅ 조건 설명

  • 현재 페이지 - 2 > 1 이면 앞쪽 생략 점 출력
  • 즉, 현재 페이지가 4 이상일 때만 출력되어야 함

현재 페이지 조건 계산 결과

1 -1 > 1 ❌ 출력 안 함
2 0 > 1 ❌ 출력 안 함
3 1 > 1 ❌ 출력 안 함
4 2 > 1 ✅ 출력함

✅ 링크 이동처리

  • page={{ page_object.number|add:-3 }}
  • 현재 페이지보다 3 앞쪽의 페이지로 이동
  • 목적: 앞쪽 구간으로 빠르게 점프하도록 함

🔹 뒤쪽 생략 점(...) 처리 로직

{% if page_object.paginator.num_pages > page_object.number|add:2 %}
    <a href="?page={{ page_object.number|add:3 }}">&hellip;</a>
{% endif %}

✅ 조건 설명

  • 전체 페이지 수 > 현재 페이지 + 2 이면 뒤쪽 생략 점 출력
  • 즉, 현재 페이지보다 뒤에 2개 이상 페이지가 남아있어야 함

현재 페이지 전체 페이지 수 조건 계산 출력 여부

8 10 10 > 10 ❌ 출력 안 함
7 10 10 > 9 ✅ 출력함
6 10 10 > 8 ✅ 출력함

✅ 링크 이동처리

  • page={{ page_object.number|add:3 }}
  • 현재 페이지보다 3 뒤쪽의 페이지로 이동
  • 목적: 뒤쪽 구간으로 빠르게 점프하도록 함

🎯 요약 비교표

구분 조건 출력 기준 점프 페이지

앞쪽 ... page - 2 > 1 현재 페이지 ≥ 4 page - 3
뒤쪽 ... 전체 > page + 2 마지막 페이지와 간격 ≥ 3 page + 3

🧠 정리

  • 점(...) 생략은 사용자에게 모든 페이지를 보여주기보다는, 일정 간격마다 구간을 나누어 보여주는 UX 방식입니다.
  • -2, +2 같은 수치는 조정 가능하며, 생략 기호의 유무를 자연스럽게 제어할 수 있습니다.
  • page + 3, page - 3으로 점프하는 링크는 묶음 단위로 이동하기 위한 핵심 UX 요소입니다.

이제 페이지네이션 UI를 직접 만들거나 커스터마이징할 때, 조건과 이동방식을 자유롭게 설계할 수 있어요! 😉