초보 개발자

pagenation 2 본문

Python/airbnb 클론

pagenation 2

taehyeki 2022. 2. 6. 21:28

이번에는 django가 제공해주는 Paginator를 사용해서 좀 더 간단하게 만들어보려고한다.

 

rooms.views.py

먼저 Paginator라는 것을 import해 온 뒤에 첫번째 인자로 object_list를 넣고, 두번째에는 몇개씩 출력할 것인지를 넣어준다. orphans는 추가옵션인데, 이건 만약 게시물이 23개라면 총 3페이지가 출력이 될 것이다.

10 10 3 이렇게, 하지만 5개 이하는 마지막 페이지에서 같이 출력하라는 명령어이다. 즉 이 경우엔 10 13 이렇게 출력이 될 것이다. 만약 27이라면 10 10 7 이렇게 출력이 될 것이다.

 

그리고 rooms는 paginator를 받아서 get_page(num)을 해주는 것인데 이 것이 참 유용하다.

기본적으로 아무 값이 들어오지않거나, 공백을 넣어도 기본적으로 1페이지를 출력을 해주고 초과하는 페이지를 입력한다면 마지막 페이지를 출력해준다.

room/home.html

 rooms에서 제공하는 함수인 previous_page_number을 사용하였다. 이를 사용하면 현재 페이지의 다음 페이지, 이전 페이지를 나타낼 수 있다. if문으로 제어해주지 않고, 마지막 페이지에서 저 버튼을 눌렀다면 오류가 발생할 것이다.

 

그리고 has_previous, has_next 등과 같이 전의 페이지가 있는지 없는지를 확인해줄 수 있고,

number로 현재 페이지의 번호, 그리고 paginator를 다시 참조하여 num_pages를 통해 전체 페이지 수도 확인할 수 있다.

 

 

다만 여기서 get_page()를 사용할 수도 있고 page()만 사용할 수도 있다.

이 경우 get_page()는 오류를 다 미리 잡아주었다. 공백이 들어오던가, 정수가 들어오던가, 터무니없는 숫자가 들어오던가,

하지만 page()는 이 부분을 우리가 일일이 지정해주어야 한다. 

 

get_page -> url에 '/'만적어도됨, ?page= 만적어도됨, 마지막 페이지 초과하면 마지막 페이지 보여줌
page -> '/'안됨, ?page= 안됨 pagenotinteger 오류, 마지막 페이지 초과하면 emptypage 오류남

 

따라서 

이런식으로 try except를 해주어 상황에 맞게 처리해줄 수도 있다.

 

 

'Python > airbnb 클론' 카테고리의 다른 글

url 'namespace : name', reverse, get_absolute_url  (0) 2022.02.07
listview  (0) 2022.02.06
pagenation 1  (0) 2022.02.05
extend base.html, include  (0) 2022.02.05
url, views  (0) 2022.02.05