0

Ich habe eine Django-Funktion basierte API, die Seitenzahl und auf jeder Seite die Größe der Seite eingibt. Hier ist mein Code.Django Paginierung über der Seitengrenze zeigt immer noch die letzten Ergebnisse nie endend

@api_view(['POST']) 
def attendance_all_get_list_by_page(request): 
    # ----- YAML below for Swagger ----- 
    """ 
    description: attendance_all_get_list_by_page 
    parameters: 
     - name: page 
     type: integer 
     required: true 
     location: form 
     - name: page_limit 
     type: integer 
     required: true 
     location: form     
    """ 
    attendance_list = Attendance.objects.all().order_by('id') 

    page = request.GET.get('page', request.POST['page']) 
    paginator = Paginator(attendance_list, request.POST['page_limit']) 

    try: 
     attendances = paginator.page(page) 
    except PageNotAnInteger: 
     attendances = paginator.page(request.POST['page']) 
    except EmptyPage: 
     attendances = paginator.page(paginator.num_pages) 


    serializer = AttendanceSerializer(list(attendances), many=True) 
    data = serializer.data[:] 
    return Response(data, status=status.HTTP_200_OK) 

mein Serializer:

class EmployeeSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Employee 
     fields = ("id", "username") 

class AttendanceSerializer(serializers.ModelSerializer): 
    employee = EmployeeSerializer(many=False, read_only=True) 

    class Meta: 
     model = Attendance 
     fields = ('id','employee','created_at') 

Man stelle ich Besucherrekord von

16,17,18,19 

zum Beispiel mit page = 2 page_limit = 2, es folgendes zeigen So hatte (dies sollte sein die letzte Seite von 4 Aufzeichnungen)

[ 
    { 
    "id": 18, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:29:29.698339Z" 
    }, 
    { 
    "id": 19, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:38:53.639749Z" 
    } 
] 

wenn ich es tut (page = 3 page_limit = 2) oder (page = 10 page_limit = 2), wird es noch zeigen

[ 
    { 
    "id": 18, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:29:29.698339Z" 
    }, 
    { 
    "id": 19, 
    "employee": { 
     "id": 16, 
     "username": "haha" 
    }, 
    "created_at": "2017-12-28T03:38:53.639749Z" 
    } 
] 

das erwartete Ergebnis sollte

[] 

Was stimmt nicht mit meiner Paginierung sein Etwas wirkt sich auf der letzten Seite aus. Ich möchte, dass die letzte Seite das Ergebnis der letzten Seite anzeigen sollte, aber danach sollte es leere Listen sein.

Antwort

0

Sie fangen EmptyPage und geben den letzten Seiteninhalt zurück. Wenn Sie außerhalb der Reichweite sind, erhalten Sie immer die zweite Seite. In diesem Fall müssen Sie eine leere Liste zurückgeben:

except EmptyPage: 
    attendances = [] 
Verwandte Themen