수학과의 좌충우돌 프로그래밍

[Django] 11. Pagination 을 알아보자 본문

웹프로그래밍/Django

[Django] 11. Pagination 을 알아보자

ssung.k 2019. 2. 27. 03:15

안녕하세요 강민성입니다.


이번 시간에도 마찬가지로 blog project를 이어서 진행해보도록 하겠습니다.


글을 계속 추가할수록 글은 아래로 쌓이게 됩니다.


하지만 대부분의 웹사이트는 일정 수준 이상 쌓이면 다음 페이지로 넘어갈 수 있도록 구현 되어 있습니다.


이를 pagination 이라고 합니다.



pagination을 알아보자



한 페이지에 3개의 글이 올 수 있도록 해보겠습니다.


장고에서 역시 이를 위한 클래스가 정의되어 있습니다.


먼저 이를 import 한 후 진행하겠습니다.


from django.core.paginator import Paginator


blog/view.py



설명할 부분이 많아 전체적인 코드를 먼제 보고 한 줄 씩 설명하겠습니다.



blog_list = Blog.objects.all()

그 전에도 사용한 적 있습니다.  Blog 클래스의 모든 객체들을 blog_list에 담아두게 됩니다.


paginator = Paginator(blog_list, 3)

위에서 import한 Paginator입니다.


2개의 인자를 받는데 첫 번째로 페이지로 분할될 객체, 두 번째로 한 페이지에 담길 객체의 수를 받습니다.


page = request.GET.get('page')

request는 사용자가 보낸 총체적인 정보를 담고 있습니다.


어디서 어떤 페이지로 정보를 보내는지 등 말이죠.


GET은 request 방식 중 하나 입니다.


GET 방식으로 정보를 받아오는 데이터를 가르키게 됩니다.


get 은 딕셔너리 자료형에서 key값으로 value를 찾을 때 사용됩니다.


그 말인 즉슨, request.GET 으로 받아온 값은 딕셔너리 자료형 이라는 의미죠.


ex) http://127.0.0.1:8000/title=first&body=hello


{'title':first, "body":hello} 


여기서 page에 해당되는 value를 가져오면 page의 번호를 리턴 받을 수 있습니다.


posts = paginator.get_page(page)

get_page 메소드는 페이지 번호를 받아 해당 페이지를 리턴하게 됩니다.


그 후 이 페이지를 다시 render를 통해 넘겨주게 됩니다.





blog/templates/home.html


이제는 home.html 로 이동하여 views 에서 받은 페이지를 띄워주도록 하겠습니다.


5번째 줄의 반복문을 통해 blog는 posts를 순회합니다.


posts는 views 에서 넘겨준 페이지 객체로서 3개의 글들을 담고 있습니다.


즉, 3개의 글씩 순회를 하여 화면에 띄워주는 것이죠.


17 ~ 27 번째 줄은 메소드 들이 낯설어서 그렇지 어렵지 않은 코드입니다.


 메소드

설명 

count() 

총 객체 수 

num_pages() 

 총 페이지 수

page(n) 

n 번째 페이지 반환

page_range()

(1부터 시작하는)페이지 리스트 반환 

get_page() 

 n번 페이지 가져오기

has_next() 

다음 페이지의 유무를 boolean 으로 반환

has_previous() 

이전 페이지의 유무를 boolean 으로 반환

previous_page_number() 

이전 페이지 번호 반환 


더 알아보고 싶으면 여기를 클릭하세요.





최종적으로 원하는 결과물을 얻을 수 있었습니다.






Comments