paginator.py 743 B

123456789101112131415161718192021222324
  1. from django.core.paginator import Paginator, Page
  2. class EnhancedPaginator(Paginator):
  3. def _get_page(self, *args, **kwargs):
  4. return EnhancedPage(*args, **kwargs)
  5. class EnhancedPage(Page):
  6. def smart_pages(self):
  7. # Show first page, last page, next/previous two pages, and current page
  8. n = self.number
  9. pages_wanted = [1, n - 2, n - 1, n, n + 1, n + 2, self.paginator.num_pages]
  10. page_list = sorted(set(self.paginator.page_range).intersection(pages_wanted))
  11. # Insert skip markers
  12. skip_pages = [x[1] for x in zip(page_list[:-1], page_list[1:]) if (x[1] - x[0] != 1)]
  13. for i in skip_pages:
  14. page_list.insert(page_list.index(i), False)
  15. return page_list