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

如何在Django的自定义json_response函数中实现分页功能

自定义json_response函数添加分页功能实现方案

核心思路

  • 为函数新增分页相关可选参数,默认设为None,不改变原有无分页场景的调用逻辑
  • 仅当分页参数有效时,在返回结构中新增pagination字段存储分页元数据,避免冗余字段
  • 可扩展适配Django/DRF自带分页对象,自动提取分页信息减少手动传参成本
  • 优化原有代码中冗余的json.dumps逻辑:JsonResponse本身会自动序列化Python对象,额外dumps会导致data字段返回字符串而非JSON对象,不符合常规接口设计规范

修改后的完整代码

import json
from django.http import JsonResponse

def json_response(data = {}, message = 'successful!', status = 'success', code = 200, page=None, page_size=None, total=None):
    data_set = {}
    status = 'success' if code == 200 else 'error' 

    # 自动适配Django/DRF分页对象,优先从分页对象提取分页参数
    if hasattr(data, 'paginator'):
        page = data.number
        page_size = data.paginator.per_page
        total = data.paginator.count
        # 提取分页后的实际数据
        data = list(data)

    data_set['code'] = code
    data_set['status'] = status
    data_set['message'] = message

    if status == 'success':
        # 处理数据字段
        try:
            data_set['data'] = data.data
        except AttributeError:
            data_set['data'] = data
        
        # 存在有效分页参数时添加分页元数据
        if all([page, page_size, total]):
            total_pages = (total + page_size - 1) // page_size
            data_set['pagination'] = {
                'page': page,
                'page_size': page_size,
                'total': total,
                'total_pages': total_pages
            }

    return JsonResponse(data_set, safe=False, status=code)

使用示例

  • 无分页场景,原有调用逻辑完全兼容:
return json_response(data={"name": "test"}, message="查询成功")
  • 手动传入分页参数场景:
# 假设已经手动分页得到当前页的数据user_list,总条数为100
return json_response(data=user_list, page=2, page_size=10, total=100, message="查询成功")
  • 适配Django ORM分页场景:
from django.core.paginator import Paginator

user_queryset = User.objects.all()
paginator = Paginator(user_queryset, 10)
page_data = paginator.page(2)
return json_response(data=page_data, message="查询成功")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:27:02