6.30.15 - 我如何使这个问题更好,更有益于其他人?反馈会有所帮助。谢谢!
我需要向dojo / dgrid请求发送内容范围标头:
我找不到任何如何做到这一点的例子。我不确定此设置的位置(内容范围:项目0-9 / *)。我已经在这个问题上获得了一个很好的linkheaderpagination示例:Django Rest Framework Pagination Settings - Content-Range但我不知道如何使这项工作产生一个Content-Range响应。任何人或任何人都知道任何好的资源或例子吗?
更新:我正在尝试在Dojo / grid中创建分页。我正在使用服务器端api(Django Rest Framework)向Dojo / Dgrid提供数据。当Django Rest Framework从Dojo获得响应时,它不会自动发送内容范围标头。在格式化为分页时,Dojo会发送范围请求。我现在不知道将Django Rest Framework API配置为在收到Dojo请求时发送内容范围标头。不幸的是,我正在尝试做一些非常具体的事情,只是两边的一般设置都不起作用。
答案 0 :(得分:2)
在回复中包含Content-Range
标题:
您只需创建一个标题字典,其中包含Content-Range
作为键和值,即返回的项目数和总项数。
例如:
class ContentRangeHeaderPagination(pagination.PageNumberPagination):
"""
A custom Pagination class to include Content-Range header in the
response.
"""
def get_paginated_response(self, data):
"""
Override this method to include Content-Range header in the response.
For eg.:
Sample Content-Range header value received in the response for
items 11-20 out of total 50:
Content-Range: items 10-19/50
"""
total_items = self.page.paginator.count # total no of items in queryset
item_starting_index = self.page.start_index() - 1 # In a page, indexing starts from 1
item_ending_index = self.page.end_index() - 1
content_range = 'items {0}-{1}/{2}'.format(item_starting_index, item_ending_index, total_items)
headers = {'Content-Range': content_range}
return Response(data, headers=headers)
假设这是收到的标题:
Content-Range: items 0-9/50
这表示从总50
中返回的前10个项目。
注意:如果计算总费用很高,您也可以使用*
代替total_items
。
Content-Range: items 0-9/* # Use this if total is expensive to calculate
答案 1 :(得分:1)
如果您正在谈论在回复中提供内容范围,我在an answer to another SO question(我认为可能也来自您的团队?)中提到过,此标题有一个替代方案:如果您的回复格式是一个对象(不仅仅是一个项目数组),它可以指定一个total
属性来表示项目的总数。
再次在DRF documentation查找几分钟,似乎可以自定义响应的格式。
基于文档和reading the source of LimitOffsetPagination(您希望用于与dstore一起使用,如previous question中已经讨论过的那样),如果我不得不采取疯狂猜测,您应该能够执行以下服务器端:
class CustomPagination(pagination.LimitOffsetPagination):
def get_paginated_response(self, data):
return Response(OrderedDict([
('total', self.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('items', data)
]))
这有意将计数分配给total
,将数据分配给items
以符合dstore/Request
的期望。 (就{d}而言,next
和previous
完全没有必要,因此您可以接受或离开它们,具体取决于您是否在其他地方使用它们。)