2015-12-02 37 views
3

我已經寫了一個類似下面的代碼片段,我需要在這裏實現分頁,請讓我知道它是如何可能的。也由於某些原因,我只想使用基於功能的視圖。如何分頁django rest框架的基於函數的視圖的響應?

@api_view(['GET',]) 

@permission_classes([AllowAny,]) 

def PersonView(request): 

context={'request': request} 
person_objects = Person.objects.all() 
if len(person_objects)> 0: 
    person_data =  PersonSerializer(person_objects,many=True,context=context) 
    return Response(person_data.data,status=status.HTTP_200_OK) 
else: 
    return Response({},status=status.HTTP_200_OK) 
+0

什麼問題? – Hexaholic

+0

它爲什麼需要成爲函數視圖?你能不能把它變成一個'ListView'? – Sayse

回答

10

http://www.django-rest-framework.org/api-guide/pagination/

from rest_framework.pagination import PageNumberPagination 

@api_view(['GET',]) 

@permission_classes([AllowAny,]) 

def PersonView(request): 

    context={'request': request} 
    paginator = PageNumberPagination() 
    paginator.page_size = 10 
    person_objects = Person.objects.all() 
    result_page = paginator.paginate_queryset(person_objects, request) 
    serializer = PersonSerializer(result_page, many=True) 
    return paginator.get_paginated_response(serializer.data) 
+0

它適用於我,但不使用上下文,所以我認爲你應該忽略它。 – neosergio

1

您也可以通過重寫PageNumberPagination定義自定義分頁類

pagination.py

from rest_framework import pagination 
class StandardResultsSetPagination(pagination.PageNumberPagination): 
    page_size = 10 
    page_query_param = 'page' 
    page_size_query_param = 'per_page' 
    max_page_size = 1000 

這將有助於確定

PAGE_SIZE,頁面查詢自定義參數和MAX_PAGE_SIZE

views.py

from rest_api.pagination import StandardResultsSetPagination 

@api_view(['GET',]) 
@permission_classes([AllowAny,]) 
def PersonView(request): 
    person_objects = Person.objects.all() 
    if len(person_objects)> 0: 
     paginator = StandardResultsSetPagination() 
     result_page = paginator.paginate_queryset(person_objects, request) 
     serializer = PersonSerializer(result_page, many=True) 
     return paginator.get_paginated_response(serializer.data) 
    else: 
     return Response({},status=status.HTTP_200_OK) 

如: 請求

GET https://api.example.org/persons/?page=1&per_page=10 

響應

HTTP 200 OK 
{ 
    "count": 1023 
    "next": "https://api.example.org/persons/?page=2&per_page=10", 
    "previous": null, 
    "results": [ 
     … 
    ] 
} 
相關問題