paginator.py 971 B

1234567891011121314151617181920212223242526272829
  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 + 1
  23. if top + self.orphans >= self.count:
  24. top = self.count
  25. return self._get_page(self.object_list[bottom:top], number, self)