列表页分页和排序
# 按照商品创建时间排序
http://www.meiduo.site:8000/list/115/skus/?sort=default
# 按照商品价格由低到高排序
http://www.meiduo.site:8000/list/115/skus/?sort=price
# 按照商品销量由高到低排序
http://www.meiduo.site:8000/list/115/skus/?sort=hot
1. 查询列表页分页和排序数据
分页文档
from django.core.paginator import Paginator, EmptyPage
from django.views import View
from apps.goods.models import SKU, GoodsCategory
from django.http import JsonResponse
from utils.goods import get_breadcrumb
class ListView(View):
"""商品列表页"""
def get(self, request, category_id):
"""提供商品列表页"""
page = request.GET.get('page')
page_size = request.GET.get('page_size')
ordering = request.GET.get('ordering')
try:
category = GoodsCategory.objects.get(id=category_id)
except Exception as e:
return JsonResponse({'code':400,
'errmsg':'获取mysql数据出错'})
breadcrumb = get_breadcrumb(category)
try:
skus = SKU.objects.filter(category=category,
is_launched=True).order_by(ordering)
except Exception as e:
return JsonResponse({'code':400,
'errmsg':'获取mysql数据出错'})
paginator = Paginator(skus, page_size)
try:
page_skus = paginator.page(page)
except EmptyPage:
return JsonResponse({'code':400,
'errmsg':'page数据出错'})
total_page = paginator.num_pages
list = []
for sku in page_skus:
list.append({
'id':sku.id,
'default_image_url':sku.default_image.url,
'name':sku.name,
'price':sku.price
})
return JsonResponse({
'code':0,
'errmsg':'ok',
'breadcrumb': breadcrumb,
'list':list,
'count':total_page
})