paginator.py 1017 B

12345678910111213141516171819202122232425262728293031
  1. from math import floor, 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. def __init__(self, object_list, per_page, orphans=0,
  10. allow_empty_first_page=True):
  11. per_page = int(per_page) - 1
  12. if orphans:
  13. orphans += 1
  14. super(PostsPaginator, self).__init__(
  15. object_list, per_page, orphans, allow_empty_first_page)
  16. def page(self, number):
  17. """
  18. Returns a Page object for the given 1-based page number.
  19. """
  20. number = self.validate_number(number)
  21. bottom = (number - 1) * self.per_page
  22. top = bottom + self.per_page
  23. if top + self.orphans >= self.count:
  24. top = self.count
  25. if top < self.count:
  26. top += 1
  27. return self._get_page(self.object_list[bottom:top], number, self)