pagination.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import math
  2. def make_pagination(page, total, per):
  3. pagination = {'start': 0, 'stop': 0, 'prev':-1, 'next':-1}
  4. page = int(page)
  5. if page > 0:
  6. pagination['start'] = (page - 1) * per
  7. # Set page and total stat
  8. pagination['page'] = int(pagination['start'] / per) + 1
  9. pagination['total'] = int(math.ceil(total / float(per)))
  10. # Fix too large offset
  11. if pagination['start'] > total:
  12. pagination['start'] = 0
  13. # Allow prev/next?
  14. if total > per:
  15. if pagination['page'] > 1:
  16. pagination['prev'] = pagination['page'] - 1
  17. if pagination['page'] < pagination['total']:
  18. pagination['next'] = pagination['page'] + 1
  19. # Fix empty pagers
  20. if not pagination['total']:
  21. pagination['total'] = 1
  22. # Set stop offset
  23. pagination['stop'] = pagination['start'] + per
  24. # Put 1/5 of last page on current page...
  25. if pagination['page'] + 1 == pagination['total']:
  26. last_page = per + total - (pagination['total'] * per)
  27. cutoff = int(per / 5)
  28. if cutoff > 1 and last_page < cutoff:
  29. pagination['stop'] += last_page
  30. pagination['total'] -= 1
  31. pagination['next'] = -1
  32. # Return complete pager
  33. return pagination