You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Django Ninja的PageNumberPagination是否存在下一页?

Django Ninja PageNumberPagination 判断下一页的方案

针对默认分页返回结构缺少下一页标识的问题,有两种便捷解决方式:

一、自定义分页类,直接返回下一页状态

继承官方的PageNumberPagination,重写to_response方法,在返回结果中添加has_next字段,后端直接计算好状态返回给前端:

from ninja.pagination import PageNumberPagination

class CustomPageNumberPagination(PageNumberPagination):
    def to_response(self, request, data, **kwargs):
        # 执行分页逻辑
        page_data = self.paginate_queryset(data, request)
        # 计算总页数
        total_pages = (self.count + self.page_size - 1) // self.page_size
        # 判断是否存在下一页:当前页码 < 总页数
        has_next = self.page < total_pages
        
        return {
            "items": page_data,
            "count": self.count,
            "has_next": has_next,
            "total_pages": total_pages  # 可选,方便前端做页码导航
        }

使用时替换原分页类即可:

from ninja.pagination import paginate
from .schemas import UserSchema
from .models import User

@api.get('/users', response=List[UserSchema])
@paginate(CustomPageNumberPagination)
def list_users(request):
    return User.objects.all()

二、前端通过现有字段计算下一页状态

无需修改后端,利用返回的count(总条数)、当前页码、页大小三个值,通过公式直接判断:

// 假设当前页为currentPage,页大小为pageSize,总条数为totalCount
const hasNext = currentPage * pageSize < totalCount;

这个公式能覆盖所有场景:

  • 当总数不是页大小整数倍时:比如总条数172,页大小20,第8页时8*20=160 <172,存在下一页;第9页时9*20=180>172,无下一页。
  • 当总数是页大小整数倍时:比如总条数180,页大小20,第9页时9*20=180不小于180,无下一页,避免了空列表的问题。

内容的提问来源于stack exchange,提问作者Dmytro Novikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 12:45:03