ํ๋ก ํธ + ๋ฐฑ์๋ ์ํต์ ํ๋ฉด์ ์ํ ๋ฆฌ์คํธ๋ฅผ ํ์ด์ง๋ณ๋ก ๋๋ ์ GETํ๋ ํ์ด์ง๋ค์ด์
์ ๊ตฌํํ๋ค. ๋ด์ฅ๋ ๋ชจ๋์ธ Paginator ์ Import ํ ๊ฒ์ ์๋๋ฉฐ,
limit + offset
์ ํ์ฉํด์ ์ ์ฉํ๋ค.
์ ์ฒด ์ํ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ views.py๋ฅผ ์๋ก ๋ณด์
def get(self, request):
order_method = int(request.GET.get('sort_method', None))
limit = int(request.GET.get('limit', 0))
offset = int(request.GET.get('offset', 0))
limit๊ณผ offset์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ฐ๋๋ค.
limit
: ํ ํ์ด์ง์ ๋ช ๊ฐ๋ฅผ ๋ณด์ฌ์ค ๊ฑด์ง,
offset
: ์์๋๋ ๋ฒํธ
ํ๋ก ํธ์ ํจ๊ป ์งํํ๋ ํด๋ก ํ๋ก์ ํธ์ ์ ์ฉ์ ํด๋ดค๋ค.
ํ๋ก ํธ์์ limit๊ณผ offset ๊ฐ์ ์ ํด์ ๋ฐฑ์๋๋ก ๋ณด๋๊ณ ,
๋๋ ๊ทธ ๊ฐ์ ์์ ๊ฐ์ด ์ฐ์ ์ฟผ๋ฆฌ์คํธ๋ง์ผ๋ก ๋ฐ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ํ ๋ฆฌ์คํธ๋ฅผ ๋ฟ๋ ค์ฃผ๋ views.py์์
limit / offset์ด ์์ ๋,
if order_method == 0:
product_all = Products.objects.all()
elif order_method == 1:
product_all = Products.objects.order_by('price')
elif order_method == 2:
product_all = Products.objects.order_by('-price')
sort_method๋ก ํํฐ ์ ๋ ฌ์ ์ํด order_by๋ฅผ ์จ์ ์ ๋ ฌํ๋ค.
limit / offset์ ์ด๋ค๋ฉด,
if order_method == 0:
product_all = Products.objects.all()[offset:offset+limit]
elif order_method == 1:
product_all = Products.objects.order_by('price')[offset:offset+limit]
elif order_method == 2:
product_all = Products.objects.order_by('-price')[offset:offset+limit]
๋์ [offset:offset+limit]
๋ฅผ ๋ถ์ฌ์ ์ธ๋ฑ์ค ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค.
๋ง์ฝ, 1๋ฒ ํ์ด์ง๋ผ๋ฉด 0:19๊น์ง, 2๋ฒ ํ์ด์ง๋ผ๋ฉด 20:39 ๊น์ง!
๋ง์ฝ ํ๋ก ํธ์์ limist ๊ณผ offset์ ๋ฐ๋ ๋ฐฉ๋ฒ์ด ์๋
์ฟผ๋ฆฌ์คํธ๋ง ๊ฐ์ผ๋ก ์ํ ๋ฆฌ์คํธ๋ฅผ ์ ํด์ ํ๋ก ํธ๋ก ์ ๋ฌํ ๋๋
page_size = 20
limit_ = int(page_size * page)
offset_ = int(limit - page_size)
all_product = Products.objects.all()[offset:limit]
์ฒ๋ผ ๋ด๊ฐ ๊ณ์ฐํด์ ๋ณด๋ด์ฃผ๋ฉด ๋๋ค.