0

Ich habe folgendes in meinem settings.pydjango Rest Rahmen global Paginierung funktioniert nicht mit ListCreateAPIView

REST_FRAMEWORK = { 
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', 
    'PAGE_SIZE': 50 
     } 

urls.py

url(r'^dashboard/users$', views.UserList.as_view()), 

und der Blick selbst

class UserList(generics.ListCreateAPIView): 
    queryset = User.objects.all() 
    serializer_class = UserSerializer 

Wenn ich versuchen, zuzugreifen /dashboard/users/?page=1 Ich bekomme eine 404 error mit Die folgenden URLs in dem Debug-Modus:

^dashboard/users$ 
^dashboard/users\.(?P<format>[a-z0-9]+)/?$ 

Nach dem Django-Frameworks Ruhe pagination docs:

Paginierung wird nur dann automatisch ausgeführt, wenn Sie die allgemeinen Ansichten oder Viewset verwenden. Wenn Sie eine reguläre APIView verwenden, müssen Sie die Paginierungs-API selbst aufrufen, um sicherzustellen, dass Sie eine paginierte Antwort zurückgeben. Sehen Sie sich den Quellcode für die Klassen mixins.ListModelMixin und generics.GenericAPIView für ein Beispiel an.

Ich verwende bereits generische Ansichten hier, warum funktioniert das dann nicht?

+0

Sie haben 'PAGE_SIZE' nicht in Ihrem' settings.py' gesetzt. – zaidfazil

+0

Ich habe das im Code eingestellt, beim Einfügen wurde es verlassen, ich habe die Frage aktualisiert –

Antwort

1

Neben dem hilfreich Vorschlag von @ nowwalkaloner, Ich sah immer noch einen 404 Fehler. Ich stellte sich heraus, das heißt zu einer URL missmatch zurückzuführen

ich von

url(r'^dashboard/users$', views.UserList.as_view()) 

zu

url(r'^dashboard/users/$', views.UserList.as_view()) 

Die Hinter / der Trick

musste meine url Definition ändern
1

Aus Beschreibung LimitOffsetPagination:

Dieser Paginierung Stil spiegelt die verwendete Syntax, wenn mehrere Datenbankeinträge nach oben. Der Client enthält einen Abfrageparameter "limit" und "offset". Das Limit gibt die maximale Anzahl der zurückzugebenden Elemente an und entspricht der Seitengröße in anderen Stilen. Der Offset gibt die Startposition der Abfrage in Bezug auf den vollständigen Satz nicht-paginierter Elemente an.

So müssen Sie limit und offset als GET-Argument übergeben, wenn Sie LimitOffsetPagination verwenden möchten: https://api.example.org/accounts/?limit=100&offset=400

Oder können Sie PageNumberPagination statt:

REST_FRAMEWORK = { 
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 
'PAGE_SIZE': 100 
} 
+0

Verstanden, aber selbst nachdem ich die erforderlichen Änderungen vorgenommen habe, sehe ich einen Fehler 404. Muss ich etwas Besonderes in der URL conf übergeben? Warum stimmen die URLs nicht überein? –

Verwandte Themen