Adjusted pagination X headers in example, moved out get_first/last_link methods

This commit is contained in:
Steve Lacey 2015-02-27 17:40:15 +00:00
parent 3dc83fb458
commit f3efdce9ed

View File

@ -101,35 +101,30 @@ from rest_framework.utils.urls import remove_query_param, replace_query_param
class LinkHeaderPagination(pagination.PageNumberPagination): class LinkHeaderPagination(pagination.PageNumberPagination):
def get_paginated_response(self, data): def get_paginated_response(self, data):
headers = {
'X-Page': self.page.number,
'X-Per-Page': self.page.paginator.per_page,
'X-Total': self.page.paginator.count,
'X-Total-Pages': self.page.paginator.num_pages
}
first_url = self.get_first_link() first_url = self.get_first_link()
prev_url = self.get_previous_link() prev_url = self.get_previous_link()
next_url = self.get_next_link() next_url = self.get_next_link()
last_url = self.get_last_link() last_url = self.get_last_link()
link = '<{}>; rel="{}"' link = '<{}>; rel="{}"'
links = []
links = [ if first_url: links.append(link.format(first_url, 'first'))
link.format(first_url, 'first'), if prev_url: links.append(link.format(prev_url, 'prev'))
link.format(prev_url, 'prev') if prev_url else None, if next_url: links.append(link.format(next_url, 'next'))
link.format(next_url, 'next') if next_url else None, if last_url: links.append(link.format(last_url, 'last'))
link.format(last_url, 'last'),
]
headers = { if links:
'Link': ", ".join([link for link in links if link]), headers['Link'] = ", ".join(links)
'X-Total-Count': self.page.paginator.count
}
return Response(data, headers=headers) return Response(data, headers=headers)
def get_first_link(self):
url = self.request.build_absolute_uri()
return remove_query_param(url, self.page_query_param)
def get_last_link(self):
url = self.request.build_absolute_uri()
page_number = self.page.paginator.num_pages
return replace_query_param(url, self.page_query_param, page_number)
``` ```
## Using your custom pagination class ## Using your custom pagination class