【问题标题】:List pagination in DjangoDjango中的列表分页
【发布时间】:2020-12-10 16:56:29
【问题描述】:

我想对书籍列表进行分页。 api端点是这样的/books?page=num&size=num 因此页数和要加载的书籍数量将是变量。

我的回复应该是这样的:

{
  pagesnum= totalpages
  booksnum=totalbooks
  books=
  [ {detailsofbook1},
    {...},
    {...}
  ]
}

我的代码:

网址模式:

path('api/books?page=<int:page>&size=<int:size>/',BookView.as_view()),

views.py

class BookView(APIView):
    http_method_names = ['get']
    permission_classes = (permissions.IsAuthenticated,)

    def index(request):
            books = Books.objects.all()

            books_per_page= request.GET.get('size')
            book_paginator = Paginator(books, books_per_page)

            page_num = request.GET.get('page')

            page = book_paginator.get_page(page_num)

            context = {
                'count': book_paginator.count(),
                'page': page
            queryset =Books.ojects.all()  
            }
            return JsonResponse(context, status=200)

This implementation doesn't work. First of all something is wrong probably with the url it doesnt seem to understand the variables. Or is something else wrong with my code?

【问题讨论】:

    标签: django api django-rest-framework pagination django-pagination


    【解决方案1】:

    pagesizequery parameters,所以你可以通过访问request.query_params 来获取它们,所以应该是这样的

            books_per_page= request.query_params.get('size') # or request.query_params['size]
            page_num = request.query_params.get('page')
    

    另外,我对index() 有点困惑,我认为您的代码应该在get(self, request, *args, **kwargs)

    我最后一件事是你可以在 DRF 中使用分页,see

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      相关资源
      最近更新 更多