Django中使用分页器

场景描述

有一个get请求,如果传递的有id,则返回具体某一个菜品的信息,如果没有,则返回当前默认分页的内容,获取用户传递的分页参数进行查询。

分页说明

如果数据量很大,几百上千条,一般是需要使用分页器的,这样可以对用户,对服务器,对网络都比较友好。
如果当前框架不提供分页查询功能,也就是我们需要手动设置pagepageSize去进行分页查询,获取到全部数据后进行切割,返回具体的某一条数组信息即可。
但是在django中已经给我们提供了分页的功能,使用起来非常方便

django中使用分页

from django.core.paginator import Paginator
from django.http import JsonResponse

def get(self, request):
    id = request.GET.get('id')
    if id is not None:
        dish = Dish.objects.filter(id=id).first()
        obj = {
            'id': dish.id,
            'name': dish.dish_name,
            'price': dish.dish_price,
            'desc': dish.dish_desc,
            'cover': dish.dish_img,
            'order_count': dish.order_count,
            'type': dish.dish_type_id
        }
        return JsonResponse({"DishInfo": obj})
    
    page_num = request.GET.get('page', 1)
    page_size = request.GET.get('page_size', 10)
    
    dishes = Dish.objects.select_related('dish_type').all()
    paginator = Paginator(dishes, page_size)
    page = paginator.get_page(page_num)
    
    dish_list = []
    for dish in page:
        obj = {
            'id': dish.id,
            'name': dish.dish_name,
            'price': dish.dish_price,
            'desc': dish.dish_desc,
            'cover': dish.dish_img,
            'order_count': dish.order_count,
            'type': dish.dish_type.name
        }
        dish_list.append(obj)
    
    return JsonResponse({
        "status": "success", 
        "data": {
            "dish_list": dish_list, 
            "total": paginator.count,
            "page_num": page_num,
            "page_size": page_size
        }
    })
posted @ 2023-05-13 10:39  含若飞  阅读(27)  评论(0编辑  收藏  举报