0

6.30.15 - КАК МОЖНО СДЕЛАТЬ ЭТОТ ВОПРОС ЛУЧШЕ И БОЛЬШЕ ПОМОЩИ ДРУГИМ? ОБРАТНАЯ СВЯЗЬ БЫЛА ПОМОЧЬ. БЛАГОДАРЯ!Конфигурация контента для Django Rest Pagination

Мне нужно отправить заголовок Content-Range к додзе/dgrid запросу: enter image description here

Я не могу найти примеры того, как это сделать. Я не совсем уверен, где этот параметр (Content-Range: items 0-9/*). Мне был предоставлен отличный пример linkheaderpagination по этому вопросу: Django Rest Framework Pagination Settings - Content-Range Но я не знаю, как сделать эту работу для создания ответа Content-Range. Любые участники или кто-нибудь знает о каких-либо хороших ресурсах или примерах?

UPDATE: Я пытаюсь создать разбивку на страницы в Dojo/grid. Я использую серверную api (Django Rest Framework) для передачи данных в Dojo/Dgrid. Django Rest Framework автоматически не отправляет заголовки диапазона контента, когда получает ответ от Dojo. Dojo отправляет запрос диапазона при форматировании для разбивки на страницы. Теперь я не знаю, как настроить API-интерфейс Django Rest Framework для отправки заголовка диапазона содержимого, когда он получает запрос от Dojo. К сожалению, я пытаюсь сделать что-то очень конкретное, и только общие настройки с обеих сторон не работают.

+0

Пожалуйста, будьте точнее о вашей проблеме. Вы не можете установить заголовок в dojo/dgrid или вам нужна помощь в понимании механики заголовка Content-Range в целом? – hna

+0

Я добавил обновление на этот вопрос, чтобы больше узнать – Johnson

ответ

1

Если вы говорите о предоставлении Content-Range в ответе, я упомянул в 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. (next и previous совершенно ненужными, насколько dstore обеспокоен, так что вы можете принять или оставить их, в зависимости, если у вас есть какие-либо использовать для них в другом месте.)

+0

Спасибо! Это очень полезно. Я танцевал все вокруг, я просто не мог понять точное его форматирование. Теперь я просто пытаюсь выяснить, куда должен идти этот класс, чтобы указать на него. Первый вопрос, на который вы ссылались, был не от кого-либо из моей команды. Остальные двое были мной. Я единственный, кто работает над этой частью проекта - я достиг точки, где никто другой не знает, что я пытаюсь снять. Вот почему я задаю так много вопросов здесь. – Johnson

+0

Ах, ладно, моя ошибка в этом - вопрос просто казался настолько близким к той же теме, в то же время, что это было странно. :) Между тем, будет ли [коммерческая поддержка] (https://www.sitepen.com/support/index.html) в ваших карточках? Кажется, что вы сражаетесь с этим битвом за дюйм в течение нескольких недель, и получение приоритетной поддержки (или прямой пользовательской разработки) от команды, которая специализируется на этом, может потенциально сократить время, которое резко сократилось. –

+0

Я просто посмотрел на этот другой вопрос ... это парень из нашей команды. Прошу прощения, я сделал быстрый взгляд раньше и слишком быстро снял. Да, это было связано с другой проблемой, которую мы имели в то время, когда я не мог заставить сетку заполнить. Он пытался помочь мне в тот день. Обычно он работает в другой части проекта. Так жаль об этом! – Johnson

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 

Это указывает на то, что первые 10 детали возвращены из общего 50.

Примечание: Вы также можете использовать * вместо total_items, если калькулятор в совокупности дорог.

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

- Я попытался обоим. Я получаю данные и запрос отправляется. Но я тоже не получаю ответа. Я получаю то же самое от обоих этих ответов. Я не уверен, почему django не отправит ответ на контентный диапазон. Я нахожусь в полной утрате, мне также не разрешено задавать еще какие-либо вопросы по SO на данный момент. Спасибо, что пытались мне помочь. – Johnson