장고 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 오후

답변 감사합니다 선생님. 그럼 위의 예시에서 page_number가 1이고 client_list.number가 53일 때 client_list.number에 5를 더해서 58이 되는건가요? 그런데 더 궁금한점이 있습니다. {% if page_number == client_list.number %} <li class="page-item active" aria-current="page"> <a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a> </li> {% else %} <li class="page-item"> <a class="page-link" href="?page={{ page_number }}">{{ page_number }}</a> </li> {% endif %} 다음과 같이 이어지는 코드에서는 page_number를 표시하도록 되어있는데, 1이 나타나지 않고 58이 나타나는 이유는 뭔가요...? 계속 질문드려 죄송합니다.. - earth_js님, 2021년 11월 23일 3:43 오후 추천 , 대댓글
+2 @earth_js님 {% if page_number >= client_list.number|add:-5 and page_number <= client_list.number|add:5 %} 이 문장을 보시면 이것은 조건문입니다. 조건문이라는 걸 이해하시는게 제일 중요해 보이네요.. 이 조건에 해당하는 page_number만이 이 문장 다음 블록이 실행될겁니다. 만약 현재 페이지가 53페이지라면 53-5 <= for문에 반복되는 페이지 <= 53+5 에 해당되는 페이지들, 즉 48부터 58페이지만 표시될겁니다. - 박응용님, 2021년 11월 23일 3:53 오후 추천 , 대댓글
@박응용님 감사합니다. 제가 조건문을 완전히 잘못 이해하고 있었네요. 마음이 급해서 꼼꼼히 선생님의 설명을 숙독하지 않은 탓입니다. 정말 감사합니다 선생님. - earth_js님, 2021년 11월 23일 4:11 오후 추천 , 대댓글
@박응용님 복습하다가 이 부분 이해안되서 머리가 아팠는데 덕분에 해결됐습니다~ 정말 기분이 좋습니당! - yje27188795님, 2022년 6월 12일 11:45 오전 추천 , 대댓글

저도 이 부분 이해가 안되서 골머리 앓다가 저자님의 답변으로 확실히 이해하게 되었습니다.
다시 정리를 해보겠습니다.

{% 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 만이
페이지 리스트로 나타납니다.

yje27188795

M 2022년 6월 12일 1:47 오후