paginator.py 906 B

123456789101112131415161718192021222324252627
  1. from django.core.paginator import Paginator
  2. class PostsPaginator(Paginator):
  3. """
  4. Paginator that returns that makes last item on page
  5. repeat as first item on next page.
  6. """
  7. def __init__(self, object_list, per_page, orphans=0, allow_empty_first_page=True):
  8. per_page = int(per_page) - 1
  9. if orphans:
  10. orphans += 1
  11. super(PostsPaginator, self).__init__(object_list, per_page, orphans, allow_empty_first_page)
  12. def page(self, number):
  13. """
  14. Returns a Page object for the given 1-based page number.
  15. """
  16. number = self.validate_number(number)
  17. bottom = (number - 1) * self.per_page
  18. top = bottom + self.per_page
  19. if top + self.orphans >= self.count:
  20. top = self.count
  21. if top < self.count:
  22. top += 1
  23. return self._get_page(self.object_list[bottom:top], number, self)