일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- socket io
- crud
- git
- 튜플
- MongoDB
- 중급파이썬
- NeXT
- EC2
- Props
- TypeScript
- RDS
- dict
- pandas
- Vue
- docker
- 채팅
- Class
- 파이썬
- react
- async
- node
- merge
- 카톡
- SAA
- flask
- S3
- lambda
- AWS
- SSA
- wetube
- Today
- Total
초보 개발자
pagenation 2 본문
이번에는 django가 제공해주는 Paginator를 사용해서 좀 더 간단하게 만들어보려고한다.
먼저 Paginator라는 것을 import해 온 뒤에 첫번째 인자로 object_list를 넣고, 두번째에는 몇개씩 출력할 것인지를 넣어준다. orphans는 추가옵션인데, 이건 만약 게시물이 23개라면 총 3페이지가 출력이 될 것이다.
10 10 3 이렇게, 하지만 5개 이하는 마지막 페이지에서 같이 출력하라는 명령어이다. 즉 이 경우엔 10 13 이렇게 출력이 될 것이다. 만약 27이라면 10 10 7 이렇게 출력이 될 것이다.
그리고 rooms는 paginator를 받아서 get_page(num)을 해주는 것인데 이 것이 참 유용하다.
기본적으로 아무 값이 들어오지않거나, 공백을 넣어도 기본적으로 1페이지를 출력을 해주고 초과하는 페이지를 입력한다면 마지막 페이지를 출력해준다.
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 |