1 from django.core.paginator import Paginator
4 class PaginationProxy(object):
5 def __init__(self, paginator=None, page=None, objects=None):
6 self.paginator = paginator
12 if not self.paginator:
15 return self.paginator.page_range
19 if not self.paginator:
22 return self.paginator.num_pages
25 def page_number(self):
29 return self.page.number
32 return bool(self.paginator)
35 def paginate(objects, per_page=None, page_number=1):
37 Given a list of objects, return a (page, obj_list) tuple.
40 per_page = int(per_page)
41 except (TypeError, ValueError):
42 # Then either it wasn't set or it was set to an invalid value
43 return PaginationProxy(objects=objects)
45 # There also shouldn't be pagination if the list is too short. Try count()
46 # first - good chance it's a queryset, where count is more efficient.
48 if objects.count() <= per_page:
49 return PaginationProxy(objects=objects)
50 except AttributeError:
51 if len(objects) <= per_page:
52 return PaginationProxy(objects=objects)
54 paginator = Paginator(objects, per_page)
56 page_number = int(page_number)
61 page = paginator.page(page_number)
65 return PaginationProxy(paginator, page, objects)