簡體   English   中英

Django rest 框架:自定義分頁下一個/上一個鏈接

[英]Django rest framework: custom pagination next/previous links

在后端作為DEFAULT_PAGINATION_CLASS我使用內置的PageNumberPagination 由於我將vue.jsfetch一起使用的原因,我不需要像django-rest-framework提供的那樣傳遞整個 url:

"count": 5,
"next": "http://127.0.0.1:8000/api/something/?page=2",
"previous": null

但只有基本網址之后的部分,例如:

/api/something/?page=2

或者只是頁碼,所以我可以建立自己的端點,例如:

if (!pageNumber) {
  let endpoint = "/api/something/"
} else {
  let endpoint = "/api/something/" + "?page=" + pageNumber;
}

使用引導程序分頁組件使用django和像vue這樣的 JavaScript 框架進行分頁的正確方法是什么?

在視圖中覆蓋您的分頁響應會改變您想要的任何內容。

 def get_paginated_response(self, data):
        return Response({
            'links': {
                'next': self.get_next_link(),
                'previous': self.get_previous_link()
            },
            'current_page': int(self.request.query_params.get('page', 1)),
            'total': self.page.paginator.count,
            'per_page': self.page_size,
            'total_pages': round(self.page.paginator.count/self.page_size, 1),
            'data': data,
        })
#it is your pagination.py
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response

class MyFavoritePagination(PageNumberPagination):
    def get_paginated_response(self, data):
        nl = self.get_next_link()
        pl = self.get_previous_link()
        return Response({
            'links': {
                'next': nl[nl.find("/api") : ] if nl is not None else None,
                'previous': pl[pl.find("/api") : ] if pl is not None else None
            },
            'count': self.page.paginator.count,
            'results': data
        })

我們可以將PageNumberPagination子類化並覆蓋get_next_link()get_previous_link()方法以添加與request對象中的域不同的域:

url = self.request.build_absolute_uri('https://front-end-domain.com')`

來自build_absolute_uri() 文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM