我正在使用Django和Django rest框架构建一个API,并尝试在json结果上添加页码。我正在尝试在返回的结果中添加页码,例如,我现在得到了这个;
{
"links": {
"next": null,
"previous": null
},
"count": 1,
"results": [
{
"url": "http://127.0.0.1:8000/api/brands/1/?format=json",
"name": "microsoft",
"description": "Nothing",
"top_brand": true,
"guid": "microsoft"
}
]
}
但是我正在试着得到这样的东西;
{
"count": 1,
"results": [
{
"url": "http://127.0.0.1:8000/api/brands/1/?format=json",
"name": "microsoft",
"description": "Nothing",
"top_brand": true,
"guid": "microsoft"
},
...
],
"page_number": 1,
"from": 1,
"to": 10,
"last_page": 4
}
最重要的属性是page_number,但我不太确定如何使用self...
从父类获取它,除了使用函数之外,我看不到任何直接的方法。这是我的代码;
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
def get_paginated_response(self, data):
return Response({
'links': {
'next': self.get_next_link(),
'previous': self.get_previous_link()
},
'count': self.page.paginator.count,
'results': data,
'page_number': self.page.paginator...,
})
发布于 2017-10-08 02:58:41
您可以在视图集中使用自定义分页,也可以在自定义视图上进行更改
pagination.py
class CustomPageNumber(pagination.PageNumberPagination):
page_size = 2
def get_paginated_response(self, data):
return Response(OrderedDict([
('lastPage', self.page.paginator.count),
('countItemsOnPage', self.page_size),
('current', self.page.number),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('results', data)
]))
在您的视图中
class TestViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Test.objects.all().order_by('-created_at')
serializer_class = TestSerializer
@list_route(methods=['get'], url_path='get-records/(?P<pk>[^/]+)')
def get_record(self, request, pk):
self.pagination_class = CustomPageNumber
queryset = self.filter_queryset(self.queryset.filter(course=pk))
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'my_project.apps.core.pagination.CustomPageNumber',
'PAGE_SIZE': 100
}
如果您想了解更多信息,请参阅文档custom-pagination-class
发布于 2017-10-09 04:09:43
如果我没记错的话,你可以用self.page.number
return Response({
'links': {
'next': self.get_next_link(),
'previous': self.get_previous_link()
},
'count': self.page.paginator.count,
'results': data,
'page_number': self.page.number,
# ^^^^^^^^^^^^^^^^
})
发布于 2021-03-31 09:35:30
我认为像这样获得to
和from
可能更适用:
class MyCustomPagination(pagination.PageNumberPagination):
def get_from(self):
return int((self.page.paginator.per_page * self.page.number) - self.page.paginator.per_page + 1)
def get_to(self):
return self.get_from() + int(len(self.page.object_list)) - 1
def get_paginated_response(self, data):
return Response({
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'count': self.page.paginator.count,
'total_pages': self.page.paginator.num_pages,
'page_number': self.page.number,
'per_page': self.page.paginator.per_page,
'from': self.get_from(),
'to': self.get_to(),
'results': data
})
https://stackoverflow.com/questions/46626994
复制相似问题