paginator.py 971 B

12345678910111213141516171819202122232425262728293031
  1. from math import ceil
  2. from django.core.paginator import Paginator
  3. from django.utils.functional import cached_property
  4. class PostsPaginator(Paginator):
  5. """
  6. Paginator that returns that makes last item on page
  7. repeat as first item on next page.
  8. """
  9. @cached_property
  10. def num_pages(self):
  11. """
  12. Returns the total number of pages.
  13. """
  14. if self.count == 0 and not self.allow_empty_first_page:
  15. return 0
  16. hits = max(1, self.count - self.orphans)
  17. return int(ceil(hits / float(self.per_page - 1)))
  18. def page(self, number):
  19. """
  20. Returns a Page object for the given 1-based page number.
  21. """
  22. number = self.validate_number(number)
  23. bottom = (number - 1) * (self.per_page - 1)
  24. top = bottom + self.per_page
  25. if top + self.orphans >= self.count:
  26. top = self.count
  27. return self._get_page(self.object_list[bottom:top], number, self)