inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트

장고 기본 CBV API (Generic display views) (2)

페이징 처리 매개변수와 페이징처리과정 의문

해결된 질문

542

빅재미코딩

작성한 질문수 24

0

Q1, Q2, Q3 이 있는데 Q1은 해결한것 같습니다(?)

 


Q1

강의 슬라이드에서

필기 해주실때

paginate_by=10 넘겨줄때 page=3 이라고 하셨는데

paginate_by = ~개씩 보기

page = 몇 페이지에서의 (현재 보는 페이지)

라는 의미라면

page 라는 이름의 매개변수까지 전달해주면 혹시 어디로 전달되나요? page라는 값은 쿼리할때도 응답받으로때도 계속 코드에서 기억하고 있어야 할 것 같은데 안보이고있네요..ㅎㅎ

살펴보고있는데 page라는 변수는 클래스변수에도 없고 위 그림의 paginate_queryset 메서드의 인자로도 없고 그래서요 (물론 리턴값으로는 나오지만..)

자문자답

아 paginate_queryset 메서드 상단에 있었네요.

(그전 DetailView에서 pk, slug 식별자가 디폴트였던것처럼) page 매개변수도 page_kwargs 클래스변수로 있고 그 값을 룩업 해서 self.kwargs 라는 딕셔너리 클래스변수에서 먼저 뒤지고

없다면 아예 HttpRequest 객체에서 뒤지고

그래도 없다면 1(첫페이지) 로 하드코딩해서 초기화 하네요

 


Q2

그리고 pagination_queryset 메서드의 page_size 매개변수는 어떤 의미 인가요? 보니깐 get_paginate_by(self, queryset) 로 그냥 단순 paginate_by (몇개씩 볼껀지) 클래스변수를 그대로 getter 해오고 page_size 라는 get_context_data메서드 내 지역변수로 쓰고 버리던데...? 궁금합니다

자문자답

-> 조회한 전체 qs 수 군요~

 


Q3

get_paginate_by 메서드에 왜 QuerySet 객체가 있을까요? 분명히 이렇게 설계한 이유가 있을꺼 같은데?

왜냐면 get_context_data 메서드 안에서

get_paginate_by(queryset: QuerySet) 호출한번하는데

사실상 API는 get_paginate_by 메서드는 단순하게 클래스변수인 self.paginate_by 를 리턴해주고 있어서 여쭤봅니다.

 

 

django

답변 2

1

이진석

page_size 는 한 페이지에서 보여줄 개수입니다.
page_size 값의 유무로 페이징 처리 여부를 판단하구요.
paginate_queryset 메서드에서는 page_size를 Paginator 생성 시에 사용하고 있습니다.

소스코드를 읽기만 하기보다, 디버거를 물려서 한 step 씩 break point를 이동하며, 각 값들의 변화를 예상해보시고 확인하시는 과정을 수행해보시는 것을 추천드립니다. 막연히 상상만 하는 코드 리딩보다 이해도가 훨씬 좋아집니다.

get_paginate_by 메서드에서 queryset 인자를 왜 받는 지는 정확히는 저도 잘 모르겠습니다.
막연히 상상해보자면 ...
get_paginate_by 메서드를 구현한다는 것은 동적으로 page size를 결정할 목적일테니
queryset.count() 를 통해 Rows 개수가 너무 적을 경우에는 페이징 처리를 하지 않도록 해볼 수도 있을 듯 합니다.

화이팅입니다. :-)

0

빅재미코딩

디버거를 물려서 한 step 씩 break point를 이동하며, 각 값들의 변화를 예상해보시고 확인하시는 과정을 수행해보시는 것을 추천드립니다. 막연히 상상만 하는 코드 리딩보다 이해도가 훨씬 좋아집니다.

이런식으로 디버깅 이용해서도 명확하게 해봐야겠네요. 감사합니다!

0

빅재미코딩

감사합니다.!

저희가 주입해주는 get_paginate_by 클래스변수와 API 메서드 내 page_size 지역변수 둘다 한페이지내 보여줄 객체 갯수를 의미한다.

그리고

get_paginate_by 메서드는 뭔가 오버라이딩 해서 개발할때 필요한 인자일수도있어서 만든사람이 넣어놓거 같기도 한거 같았습니다.

 

 

안녕하세요.

0

49

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

275

1

useEffect 훅에서 else 유무에 따른 결과

0

211

1

useAxios 훅의 dependency array 설정

0

245

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

268

1

bootstrap4

0

471

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

365

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

574

3

useState는 필수일까요?

0

263

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

600

4

Django allauth를 사용한 소셜 로그인 시 에러

0

655

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

556

2

useLocalStorage() 함수 사용여부

0

229

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

449

1

리듀서의 의미 재확인

0

430

1

simple-jwt Refresh Token 사용 노하우

0

899

2

docker compose 를 통한 배포 관련 오류 문의

0

672

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

365

1

is_like_user

0

233

1

related_name 오류

0

275

1

re_path 오류

0

259

1

re_path url

0

251

1

No post matches the given query

0

661

2

sendgrid 메일 발송이 안됩니다 ㅠㅠ

0

892

3