Dojo Django Rest分页的内容范围配置

Dojo Django Rest分页的内容范围配置,dojo,pagination,django-rest-framework,http-content-range,Dojo,Pagination,Django Rest Framework,Http Content Range,6.30.15-我如何才能让这个问题变得更好,对其他人更有帮助?反馈会很有帮助。谢谢 我需要向dojo/dgrid请求发送内容范围标头: 我找不到任何这样做的例子。我不确定该设置的位置(内容范围:items 0-9/*)。在这个问题上,我得到了一个很好的LinkHeaderPaging示例:但我不知道如何使其产生内容范围响应。有没有人知道什么好的资源或例子 更新:我正在尝试在Dojo/grid中创建分页。我正在使用服务器端api(Django Rest框架)向Dojo/Dgrid提供数据。Dja

6.30.15-我如何才能让这个问题变得更好,对其他人更有帮助?反馈会很有帮助。谢谢

我需要向dojo/dgrid请求发送内容范围标头:

我找不到任何这样做的例子。我不确定该设置的位置(内容范围:items 0-9/*)。在这个问题上,我得到了一个很好的LinkHeaderPaging示例:但我不知道如何使其产生内容范围响应。有没有人知道什么好的资源或例子


更新:我正在尝试在Dojo/grid中创建分页。我正在使用服务器端api(Django Rest框架)向Dojo/Dgrid提供数据。Django Rest框架在从Dojo获得响应时不会自动发送内容范围头。Dojo在格式化为分页时发送范围请求。我现在不知道如何配置Django Rest Framework API,以便在收到Dojo的请求时发送内容范围标头。不幸的是,我正在尝试做一些非常具体的事情,只是两边的常规设置都不起作用

如果您谈论的是在响应中提供内容范围,我在中提到(我相信这也可能来自您的团队?)这个标题有一个替代方案:如果您的响应格式是一个对象(而不仅仅是一个项目数组),它可以指定指示项目总数的
total
属性

再看几分钟,似乎可以自定义响应的格式

基于文档和(您希望使用它们来处理dstore,如a中所讨论的),如果我不得不胡乱猜测,您应该能够在服务器端执行以下操作:

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)
        ]))

这有目的地将计数分配给
总计
,将数据分配给
项目
,以符合
数据存储/请求
的预期。(
next
previous
对于数据存储来说是完全不必要的,因此您可以接受或离开它们,这取决于您在其他地方是否对它们有任何用处。)

如果您在回复中谈论的是提供内容范围,我在中提到过(我相信这也可能来自您的团队?)该标题有一种替代方法:如果您的响应格式是一个对象(而不仅仅是一个项目数组),那么它可以指定一个
total
属性来指示项目总数

再看几分钟,似乎可以自定义响应的格式

基于文档和(您希望使用它们来处理dstore,如a中所讨论的),如果我不得不胡乱猜测,您应该能够在服务器端执行以下操作:

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)
        ]))

这有目的地将计数分配给
总计
,将数据分配给
项目
,以符合
数据存储/请求
的预期。(
next
previous
对于数据存储来说是完全不必要的,因此您可以接受或保留它们,这取决于您是否在其他地方使用它们。)

包括
内容范围
标题作为响应:

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)
您只需要创建一个headers字典,其中
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项

注意:如果计算总计费用高昂,您也可以使用
*
而不是
总计项目

Content-Range: items 0-9/* # Use this if total is expensive to calculate

包括
内容范围
响应标题:

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)
您只需要创建一个headers字典,其中
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项

注意:如果计算总计费用高昂,您也可以使用
*
而不是
总计项目

Content-Range: items 0-9/* # Use this if total is expensive to calculate

请更准确地说明你的问题是什么。您是否无法在dojo/dgrid中设置标题,或者您是否需要帮助了解内容范围标题的一般机制?我为问题添加了一个更新,以提供更多详细信息。请更准确地说明您的问题所在。您是否无法在dojo/dgrid中设置标题,或者您是否需要帮助了解内容范围标题的一般机制?我为问题添加了一个更新以提供更多详细信息谢谢!这很有帮助。我一直在绕着这个跳舞,我就是想不出它的确切格式。现在我只是想弄清楚这个类需要去哪里才能指向它。你提到的第一个问题不是我团队中的任何人提出的。另外两个是我。我是唯一一个在这个项目的这一部分工作的人——我已经到了一个没有人真正知道我想要实现什么的地步。这就是我为什么在这里问这么多问题的原因。啊,好吧,我当时在这方面犯了错误——这个问题在同一时间似乎离同一个主题太近了,简直不可思议在这期间,你会有机会吗?看起来你已经一点一点地在这场战斗中战斗了几个星期,从一个专门从事这项工作的团队那里获得优先支持(或直接定制开发)可能会大大缩短这段时间。我只是花了更长的时间研究了另一个问题。。。那是我们队的一个人。很抱歉,我之前快速浏览了一下,浏览得太快了。是的,这与我们当时遇到的另一个问题有关,当时我无法填充网格。那天他想帮我一些忙。他通常在项目的不同部分工作。所以