X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/aa974af0f752e8b3e23337764e0bbd5e140217d8..b148ca4096bd2154e3c9b2d9f1cda7ef31c346db:/contrib/penfield/utils.py diff --git a/contrib/penfield/utils.py b/contrib/penfield/utils.py index 0318e5e..89d01a7 100644 --- a/contrib/penfield/utils.py +++ b/contrib/penfield/utils.py @@ -1,4 +1,36 @@ -from django.core.paginator import Paginator +from django.core.paginator import Paginator, EmptyPage + + +class PaginationProxy(object): + def __init__(self, paginator=None, page=None, objects=None): + self.paginator = paginator + self.page = page + self.objects = objects + + @property + def page_range(self): + if not self.paginator: + return None + + return self.paginator.page_range + + @property + def num_pages(self): + if not self.paginator: + return None + + return self.paginator.num_pages + + @property + def page_number(self): + if not self.page: + return None + + return self.page.number + + # Why doesn't this work? + #def __bool__(self): + # return bool(self.paginator) def paginate(objects, per_page=None, page_number=1): @@ -9,16 +41,16 @@ def paginate(objects, per_page=None, page_number=1): per_page = int(per_page) except (TypeError, ValueError): # Then either it wasn't set or it was set to an invalid value - return None, objects + return PaginationProxy(objects=objects) # There also shouldn't be pagination if the list is too short. Try count() # first - good chance it's a queryset, where count is more efficient. try: if objects.count() <= per_page: - return None, objects + return PaginationProxy(objects=objects) except AttributeError: if len(objects) <= per_page: - return None, objects + return PaginationProxy(objects=objects) paginator = Paginator(objects, per_page) try: @@ -26,8 +58,9 @@ def paginate(objects, per_page=None, page_number=1): except: page_number = 1 - # This will raise an EmptyPage error if the page number is out of range. - # This error is intentionally left for the calling function to handle. - page = paginator.page(page_number) + try: + page = paginator.page(page_number) + except EmptyPage: + page = None - return page, page.object_list \ No newline at end of file + return PaginationProxy(paginator, page, objects) \ No newline at end of file