12345678910111213141516171819202122232425262728293031323334 |
- from math import ceil
- from django.core.paginator import Paginator
- from django.utils.functional import cached_property
- class PostsPaginator(Paginator):
- """
- Paginator that returns that makes last item on page
- repeat as first item on next page.
- """
- @cached_property
- def num_pages(self):
- """
- Returns the total number of pages.
- """
- if self.count == 0 and not self.allow_empty_first_page:
- return 0
- hits = max(1, self.count - self.orphans)
- hits += int(ceil(hits / float(self.per_page)))
- return int(ceil(hits / float(self.per_page)))
- def page(self, number):
- """
- Returns a Page object for the given 1-based page number.
- """
- number = self.validate_number(number)
- bottom = (number - 1) * self.per_page
- if number > 1:
- bottom -= number - 1
- top = bottom + self.per_page
- if top + self.orphans >= self.count:
- top = self.count
- return self._get_page(self.object_list[bottom:top], number, self)
|