0

6.30.15 - この質問をより良く、他の人にとってより役立つものにするにはどうすればよいですか? フィードバックは役に立ちます。ありがとう!

content-range ヘッダーを dojo/dgrid リクエストに送信する必要があります。ここに画像の説明を入力

これを行う方法の例が見つかりません。この設定がどこにあるのか正確にはわかりません (Content-Range: items 0-9/*)。この質問に関するリンクヘッダーのページネーションの素晴らしい例が与えられました: Django Rest Framework Pagination Settings - Content-Rangeしかし、これを機能させて Content-Range レスポンスを生成する方法がわかりません。誰かが良いリソースや例を知っていますか??

更新: Dojo/grid でページネーションを作成しようとしています。サーバー側の API (Django Rest Framework) を使用して Dojo/Dgrid にデータを提供しています。Django Rest Framework は、Dojo からの応答を受け取ったときに content-range ヘッダーを自動的に送信しません。Dojo は、ページネーションを持つようにフォーマットされている場合、範囲要求を送信します。Django Rest Framework API が Dojo からの要求を受け取ったときに content-range ヘッダーを送信するように構成する方法がわかりません。残念ながら、私は非常に具体的なことをしようとしていますが、どちらの側でも一般的な設定だけでは機能しません。

4

2 に答える 2

3

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 

これは、 total のうち最初の 10 個のアイテムが返されることを示します50

注:合計の計算にコストがかかる場合は、*代わりに使用することもできます。total_items

Content-Range: items 0-9/* # Use this if total is expensive to calculate
于 2015-06-18T15:57:14.913 に答える
1

応答で Content-Range を提供することについて話している場合は、別の SO の質問(これもあなたのチームから発信された可能性があると思いますか?) への回答で、このヘッダーに代わる方法が 1 つあることを述べました。応答形式がオブジェクト (アイテムの配列だけでなく)totalの代わりに、アイテムの総数を示すプロパティを指定できます。

再びDRF のドキュメントを数分調べてみると、応答の形式をカスタマイズできるはずです。

ドキュメントに基づいて、LimitOffsetPagination のソース(前の質問で既に説明したように、dstore で作業するために使用したい) を読んで、私が大雑把な推測をしなければならなかった場合、次のサーバーを実行できるはずです-側:

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ます。( dstore に関する限り完全に不要なので、他の場所で使用するかどうかに応じて、それらを使用するかそのままにしておくことができます。next)previous

于 2015-06-18T00:09:38.463 に答える