장고 pagination 문법 질문입니다.
선생님과 학생분들의 수준 높은 강의와 답변 덕분에 장고를 잘 배우고 있습니다.
장고에 대해 질문이 있습니다.
페이징 서비스에서
{% if page_number >= client_list.number|add:-5 and page_number <= client_list.number|add:5 %}
이 코드에 대한 질문입니다.
add에 입력한 숫자에 따라 보여지는 페이지의 범위가 정해진다는 것은 이해하겠는데, 어떻게 데이터가 처리가 되어서 현재 페이지를 기준으로 앞뒤로 5개의 페이지만 보이고 나머지는 이전처리가 되는지 궁금합니다.
예를 들면, 현재 페이지가 7이고 page_number가 1이라면, page_number은 6이 되는건가요?
그럼 만약에, 현재 페이지가 127이고 page_number가 1이라면, page_number은 6가 되는건가요? 그럼 6는 강조 처리가 되지 않은채로 리스트에 표시가 되어야 하는거 아닌가요...? 왜 이전으로 표시되어 안보이는지 궁금합니다.
그리고 현재 페이지가 2이고 page_number가 3이라면, page_number은 -2여야 할텐데, 음수는 보이지 않는지도요... 답변 기다리겠습니다. 감사합니다 선생님.
말씀하신 내용을 보니 page_number와 client_list.number에 대한 정의가 명확하지 않은것 같습니다.
page_number는 for문에 의해서 반복적으로 대입되는 페이지 번호를 의미하고 client_list.number는 현재 선택된 페이지 번호를 의미합니다.
제가 질문을 엉성하게 한 것 같아 다시 한 번 질문드리겠습니다.
예를 들어 제가 53페이지에 있다고 한다면, client_list.number = 53일테고, for문을 돌면서 1페이지부터 page_number에 1이 대입이 되겠지요?
그럼 page_number = 1, client_list.number = 53이니 page_number에 5를 더하겠고, 그럼 page_number은 6이 됩니다.
그럼 6부터 53까지 표시가 쭉~~ 되는거 아닌가요?
왜 48부터 표시가 되는건지 잘 이해가 안됩니다...
그리고 만약 제가 2페이지에 있고, page_number가 쭉 돌면서 3일 때를 예로 든다면,
page_number = 3, clent_list.number = 2이니 page_number에서 -5를 더하겠고, 그럼 page_number은 -2가 될텐데, -2는 표시가 안되는걸 보면 자체적으로 음수는 표시하지 않게 되는건가요?
답변 기다리겠습니다.
감사합니다.
earth_js 님 469
2021년 11월 23일 3:19 오후
2개의 답변이 있습니다. 1 / 1 Page
page_number >= client_list.number|add:-5
이 문장에서 5를 빼야 하는 대상은 page_number가 아니라 client_list.number 입니다.
요 부분이 헷갈리신것 같네요.
박응용 님
2021년 11월 23일 3:30 오후
저도 이 부분 이해가 안되서 골머리 앓다가 저자님의 답변으로 확실히 이해하게 되었습니다.
다시 정리를 해보겠습니다.
{% if page_number >= question_list.number|add:-5 and page_number <= question_list.number|add:5 %}
이 코드에서 question_list.number
가 현재페이지를 나타내는데 먼저 탬플릿 필터 |add:-5
에 의해 5를 빼주게 됩니다.
예를 들어 현재 페이지가 20이라면 '20-5'의 결과로 15가 되고, 이 결과로 page_number >= 15
가 됩니다.
(혹시나 헷갈리실까봐 다시 말해 드리지만 탬플릿 필터의 연산 대상은 필터기호가 붙어 있는 question_list.number
입니다.)
마찬가지의 경우(현재페이지가 20)에서 같은 원리로 |add:5
에 의해 20+5는 25이므로 page_number >= 25
입니다.
그리고 and
연산에 의해 두 결과가 합쳐져서 15 <= page_number <= 25
로 범위가 정해져 이 범위에 해당하는 page_number
만이
페이지 리스트로 나타납니다.
M 2022년 6월 12일 1:47 오후