From: Albert Tugushev Date: Sat, 2 Jan 2016 05:10:58 +0000 (+0300) Subject: Fix window exceeding page range X-Git-Tag: 2.2.0~2^2 X-Git-Url: https://git.mdrn.pl/django-pagination.git/commitdiff_plain/4e8ac7d35af1ade2781406c678dbf8f5908737c6?ds=inline;hp=cfb14ce2fe55045b2c6bd2440ae04f92cc7db131 Fix window exceeding page range Resolve issue #33 --- diff --git a/linaro_django_pagination/templatetags/pagination_tags.py b/linaro_django_pagination/templatetags/pagination_tags.py index 167f13a..f106942 100644 --- a/linaro_django_pagination/templatetags/pagination_tags.py +++ b/linaro_django_pagination/templatetags/pagination_tags.py @@ -284,7 +284,7 @@ def paginate(context, window=DEFAULT_WINDOW, margin=DEFAULT_MARGIN): window_end = window_end - window_start window_start = 0 if window_end > paginator.num_pages: - window_start = window_start - (window_end - paginator.num_pages) + window_start = max(0, window_start - (window_end - paginator.num_pages)) window_end = paginator.num_pages pages = page_range[window_start:window_end] diff --git a/linaro_django_pagination/tests/test_main.py b/linaro_django_pagination/tests/test_main.py index 1dc6d2c..2409b0f 100644 --- a/linaro_django_pagination/tests/test_main.py +++ b/linaro_django_pagination/tests/test_main.py @@ -209,6 +209,38 @@ class ZeroWindowZeroMarginTestCase(SimpleTestCase): ) +class NoEllipsisTestCase(SimpleTestCase): + """ + Tests a case where should be no any ellipsis pages. + """ + def setUp(self): + self.p = Paginator(range(100), 25) + + def test_on_start(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(1)}, 2, 0)['pages'], + [1, 2, 3, 4], + ) + + def test_in_middle_page_2(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(2)}, 2, 0)['pages'], + [1, 2, 3, 4], + ) + + def test_in_middle_page_3(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(3)}, 2, 0)['pages'], + [1, 2, 3, 4], + ) + + def test_on_end(self): + self.assertListEqual( + paginate({'paginator': self.p, 'page_obj': self.p.page(4)}, 2, 0)['pages'], + [1, 2, 3, 4], + ) + + class SpecialTestCase(SimpleTestCase): def test_middle_with_no_window_and_margin_1(self): p = Paginator(range(31), 2)