1 from django.core.paginator import Paginator, EmptyPage
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
31 # Why doesn't this work?
33 # return bool(self.paginator)
36 def paginate(objects, per_page=None, page_number=1):
38 Given a list of objects, return a (page, obj_list) tuple.
41 per_page = int(per_page)
42 except (TypeError, ValueError):
43 # Then either it wasn't set or it was set to an invalid value
44 return PaginationProxy(objects=objects)
46 # There also shouldn't be pagination if the list is too short. Try count()
47 # first - good chance it's a queryset, where count is more efficient.
49 if objects.count() <= per_page:
50 return PaginationProxy(objects=objects)
51 except AttributeError:
52 if len(objects) <= per_page:
53 return PaginationProxy(objects=objects)
55 paginator = Paginator(objects, per_page)
57 page_number = int(page_number)
62 page = paginator.page(page_number)
66 return PaginationProxy(paginator, page, objects)