📗 Django
Django 공식 문서 : 🔗 https://docs.djangoproject.com/en/5.1/topics/pagination/
Paginator, PageNotAnInteger, EmptyPage
📗 Pagination(페이지네이션)이란?
많은 데이터를 한 번에 다 보여주지 않고, 일정한 단위로 나누어 필요한 만큼만 가져오는 기술이에요.
Django에서 제공하는 Paginator, PageNotAnInteger, EmptyPage는 페이지네이션(목록을 여러 페이지로 나누는 작업)을 처리하기 위한 도구들을 제공해줘요.
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
이렇게 불러올 수 있어요.
📗 Paginator:
리스트 데이터를 페이지별로 나누는 클래스예요.
예를 들어,
한 페이지에 10개의 항목만 보여주고 싶을 때 사용해요.
📗 PageNotAnInteger:
요청된 페이지가 정수가 아닌 경우 발생하는 예외예요.
예를 들어,
사용자가 페이지 번호를 문자나 특수문자 같은 정수가 아닌 값으로 요청했을 때 발생해요.
📗 EmptyPage:
요청된 페이지가 범위를 초과할 때 발생하는 예외예요.
예를 들어,
데이터가 20개인데 사용자가 3페이지를 요청했다면, 3페이지에는 데이터가 없으므로 이 예외가 발생해요.
▼ 예시 코드
이 코드는 Paginator를 사용하여 1페이지, 2페이지 등의 페이지를 요청할 수 있게 해 줘요.
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.shortcuts import render
def my_view(request):
# 1부터 100까지의 숫자를 예시로 사용할 거예요
numbers = list(range(1, 101))
# Paginator를 사용하여 데이터를 10개씩 나눠요
paginator = Paginator(numbers, 10)
# 요청된 페이지 번호를 가져와요. 없으면 1페이지로 기본값 설정해요
page_number = request.GET.get('page', 1)
try:
# 페이지 번호에 맞는 데이터만 가져와요
page_obj = paginator.get_page(page_number)
except PageNotAnInteger:
# 만약 페이지 번호가 정수가 아니면 첫 페이지를 보여줘요
page_obj = paginator.get_page(1)
except EmptyPage:
# 만약 페이지 번호가 범위를 초과하면 마지막 페이지를 보여줘요
page_obj = paginator.get_page(paginator.num_pages)
# 렌더링할 템플릿에 페이지 데이터를 전달해요
return render(request, 'my_template.html', {'page_obj': page_obj})
▼ 코드 설명
- numbers = list(range(1, 101)) : 1부터 100까지의 숫자를 예시로 만들어요.
- paginator = Paginator(numbers, 10) : Paginator 객체를 생성하여, 10개의 항목씩 나눠요.
- page_number = request.GET.get('page', 1) : GET 요청에서 page 파라미터를 가져와요. 없으면 기본값으로 1페이지를 사용해요.
- page_obj = paginator.get_page(page_number) : 페이지 번호에 맞는 데이터를 가져와요. 페이지 번호가 정수가 아니면 PageNotAnInteger 예외가 발생하고, 범위를 초과하면 EmptyPage 예외가 발생해요.
- render(request, 'my_template.html', {'page_obj': page_obj}) : 데이터를 템플릿에 전달해서 페이지를 렌더링 해요.
▼ 예외 처리
- PageNotAnInteger : 페이지 번호가 정수가 아닐 때 예외를 처리해요.
- EmptyPage : 요청한 페이지가 범위를 초과할 때 예외를 처리해요.
'🔥 공부 > 📘 Django 공부' 카테고리의 다른 글
[Django] Django 기초 마무리 (0) | 2025.01.19 |
---|---|
[Django] Model Relationship (M:N), 좋아요&팔로우 구현 (0) | 2025.01.19 |
[Django] Custom UserModel 활용하기 (0) | 2025.01.18 |
[Django] Model Relationship (1:N), 댓글 (0) | 2025.01.18 |
[Django] Django Admin (0) | 2025.01.17 |