X-Git-Url: https://git.mdrn.pl/django-pagination.git/blobdiff_plain/93b0509ca44dbb1903d3cd9be62c330ec20eeb53..9324fa053ab97e87a4b3122daf785d0c607313e7:/linaro_django_pagination/paginator.py diff --git a/linaro_django_pagination/paginator.py b/linaro_django_pagination/paginator.py index f67aa23..cd3a0f7 100644 --- a/linaro_django_pagination/paginator.py +++ b/linaro_django_pagination/paginator.py @@ -1,10 +1,42 @@ +# Copyright (c) 2008, Eric Florenzano +# Copyright (c) 2010, 2011 Linaro Limited +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# * Neither the name of the author nor the names of other +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + from django.core.paginator import Paginator, Page, PageNotAnInteger, EmptyPage + class InfinitePaginator(Paginator): """ Paginator designed for cases when it's not important to know how many total - pages. This is useful for any object_list that has no count() method or can - be used to improve performance for MySQL by removing counts. + pages. This is useful for any object_list that has no count() method or + can be used to improve performance for MySQL by removing counts. The orphans parameter has been removed for simplicity and there's a link template string for creating the links to the next and previous pages. @@ -12,7 +44,7 @@ class InfinitePaginator(Paginator): def __init__(self, object_list, per_page, allow_empty_first_page=True, link_template='/page/%d/'): - orphans = 0 # no orphans + orphans = 0 # no orphans super(InfinitePaginator, self).__init__(object_list, per_page, orphans, allow_empty_first_page) # no count or num pages @@ -81,8 +113,7 @@ class InfinitePage(Page): Checks for one more item than last on this page. """ try: - next_item = self.paginator.object_list[ - self.number * self.paginator.per_page] + self.paginator.object_list[self.number * self.paginator.per_page] except IndexError: return False return True @@ -107,6 +138,7 @@ class InfinitePage(Page): return self.paginator.link_template % (self.number - 1) return None + class FinitePaginator(InfinitePaginator): """ Paginator for cases when the list of items is already finite. @@ -150,6 +182,7 @@ class FinitePaginator(InfinitePaginator): page_items = self.object_list[:self.per_page] return FinitePage(page_items, number, self) + class FinitePage(InfinitePage): def has_next(self): @@ -157,7 +190,7 @@ class FinitePage(InfinitePage): Checks for one more item than last on this page. """ try: - next_item = self.paginator.object_list[self.paginator.per_page] + self.paginator.object_list[self.paginator.per_page] except IndexError: return False return True @@ -168,4 +201,4 @@ class FinitePage(InfinitePage): relative to total objects in the paginator. """ ## TODO should this holler if you haven't defined the offset? - return self.paginator.offset \ No newline at end of file + return self.paginator.offset