Django REST:JSON响应中没有分页块(PageNumberPagination)

Django REST:JSON响应中没有分页块(PageNumberPagination),django,python-3.x,pagination,django-rest-framework,Django,Python 3.x,Pagination,Django Rest Framework,对于我的API,我使用的是API_视图装饰器。分页问题(JSON响应)。我得到了没有“分页块”的响应: 我还试图覆盖默认的PageNumberPagination,它可以工作,但仍然没有“分页块” 我的api视图(查看GET-example>else): My settings.py: REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_jwt.authentication.JSONWebTok

对于我的API,我使用的是API_视图装饰器。分页问题(JSON响应)。我得到了没有“分页块”的响应:

我还试图覆盖默认的PageNumberPagination,它可以工作,但仍然没有“分页块”

我的api视图(查看GET-example>else):

My settings.py:

REST_FRAMEWORK = {
  'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework_jwt.authentication.JSONWebTokenAuthentication',),

  'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.AllowAny',],
  'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
  'PAGE_SIZE': 2
}

预期结果:

{
    "count": 1023
    "next": "https://api.example.org/accounts/?page=5",
    "previous": "https://api.example.org/accounts/?page=3",
    "results": [
       …
    ]
}

您需要调用
get\u paginated\u response()
方法

@csrf_exempt
@api_view(['GET', 'POST', ])
@permission_classes([AllowAny, ])
def product(request):
    item = request.data
    if request.method == 'POST':
        serializer = ProductSerializer(data=item)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response({"message": "Product created!", "data": request.data}, status=status.HTTP_201_CREATED)
    else:
        all_obj = Product.objects.filter(available=True)

        paginator = PageNumberPagination()
        result_page = paginator.paginate_queryset(all_obj, request)
        if result_page is not None:
            serializer = ProductSerializer(result_page, many=True)
            return paginator.get_paginated_response(serializer.data)
        else:
            serializer = ProductSerializer(all_obj, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)
@csrf\u豁免
@api_视图(['GET','POST',])
@权限\u类([AllowAny,])
def产品(请求):
item=request.data
如果request.method==“POST”:
序列化程序=产品序列化程序(数据=项)
serializer.is\u有效(raise\u exception=True)
serializer.save()
返回响应({“消息”:“产品已创建!”,“数据”:request.data},status=status.HTTP_201_已创建)
其他:
all_obj=Product.objects.filter(available=True)
paginator=PageNumberPagination()
结果页面=分页器。分页查询集(所有对象,请求)
如果结果页面不是无:
serializer=ProductSerializer(结果\页面,多个=真)
返回paginator.get_paginated_响应(serializer.data)
其他:
serializer=ProductSerializer(all_obj,many=True)
返回响应(serializer.data,status=status.HTTP\u 200\u OK)
注意不要调用
len(queryset)
,这将导致
N
数据库连接数。改用
count()
方法

{
    "count": 1023
    "next": "https://api.example.org/accounts/?page=5",
    "previous": "https://api.example.org/accounts/?page=3",
    "results": [
       …
    ]
}
@csrf_exempt
@api_view(['GET', 'POST', ])
@permission_classes([AllowAny, ])
def product(request):
    item = request.data
    if request.method == 'POST':
        serializer = ProductSerializer(data=item)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response({"message": "Product created!", "data": request.data}, status=status.HTTP_201_CREATED)
    else:
        all_obj = Product.objects.filter(available=True)

        paginator = PageNumberPagination()
        result_page = paginator.paginate_queryset(all_obj, request)
        if result_page is not None:
            serializer = ProductSerializer(result_page, many=True)
            return paginator.get_paginated_response(serializer.data)
        else:
            serializer = ProductSerializer(all_obj, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)