summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Beaven <smileychris@gmail.com>2010-12-09 02:34:14 +0000
committerChris Beaven <smileychris@gmail.com>2010-12-09 02:34:14 +0000
commitff8711a825ea9bbe98e873d7aa28ce5135528fec (patch)
treef79d3b5709879ab83f0cfa459dd53f611872dc09
parentb37d867929f41a81feb0954023471d7c50081e41 (diff)
Fixes #14873 -- A paginated ListView with a List instead of queryset produces an error.
Additional minor change in functionality: the page is now not considered paginated if the objects do not span multiple pages according to the paginator. This will only affect views with a custom paginator method which uses orphans. git-svn-id: http://code.djangoproject.com/svn/django/trunk@14864 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/views/generic/list.py6
-rw-r--r--docs/ref/class-based-views.txt10
-rw-r--r--tests/regressiontests/generic_views/list.py7
-rw-r--r--tests/regressiontests/generic_views/urls.py2
4 files changed, 16 insertions, 9 deletions
diff --git a/django/views/generic/list.py b/django/views/generic/list.py
index d90842fedc..22135720ed 100644
--- a/django/views/generic/list.py
+++ b/django/views/generic/list.py
@@ -32,9 +32,9 @@ class MultipleObjectMixin(object):
"""
Paginate the queryset, if needed.
"""
- if queryset.count() > page_size:
- paginator = self.get_paginator(queryset, page_size, allow_empty_first_page=self.get_allow_empty())
- page = self.kwargs.get('page', None) or self.request.GET.get('page', 1)
+ paginator = self.get_paginator(queryset, page_size, allow_empty_first_page=self.get_allow_empty())
+ if paginator.num_pages > 1:
+ page = self.kwargs.get('page') or self.request.GET.get('page') or 1
try:
page_number = int(page)
except ValueError:
diff --git a/docs/ref/class-based-views.txt b/docs/ref/class-based-views.txt
index 150ffff2e1..4b51469ced 100644
--- a/docs/ref/class-based-views.txt
+++ b/docs/ref/class-based-views.txt
@@ -344,22 +344,22 @@ MultipleObjectMixin
**Context**
- * ``object_list``: The list of object that this view is displaying. If
+ * ``object_list``: The list of objects that this view is displaying. If
``context_object_name`` is specified, that variable will also be set
in the context, with the same value as ``object_list``.
* ``is_paginated``: A boolean representing whether the results are
paginated. Specifically, this is set to ``False`` if no page size has
- been specified, or if the number of available objects is less than or
- equal to ``paginate_by``.
+ been specified, or if the available objects do not span multiple
+ pages.
* ``paginator``: An instance of
:class:`django.core.paginator.Paginator`. If the page is not
- paginated, this context variable will be ``None``
+ paginated, this context variable will be ``None``.
* ``page_obj``: An instance of
:class:`django.core.paginator.Page`. If the page is not paginated,
- this context variable will be ``None``
+ this context variable will be ``None``.
MultipleObjectTemplateResponseMixin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/tests/regressiontests/generic_views/list.py b/tests/regressiontests/generic_views/list.py
index bde741ef26..6ed28170a7 100644
--- a/tests/regressiontests/generic_views/list.py
+++ b/tests/regressiontests/generic_views/list.py
@@ -90,7 +90,7 @@ class ListViewTests(TestCase):
self._make_authors(7)
res = self.client.get('/list/authors/paginated/custom_class/')
self.assertEqual(res.status_code, 200)
- self.assertIsInstance(res.context['paginator'], CustomPaginator)
+ self.assertIsNone(res.context['paginator'])
# Custom pagination allows for 2 orphans on a page size of 5
self.assertEqual(len(res.context['object_list']), 7)
@@ -101,6 +101,11 @@ class ListViewTests(TestCase):
# Custom pagination allows for 2 orphans on a page size of 5
self.assertEqual(len(res.context['object_list']), 7)
+ def test_paginated_non_queryset(self):
+ res = self.client.get('/list/dict/paginated/')
+ self.assertEqual(res.status_code, 200)
+ self.assertEqual(len(res.context['object_list']), 1)
+
def test_allow_empty_false(self):
res = self.client.get('/list/authors/notempty/')
self.assertEqual(res.status_code, 200)
diff --git a/tests/regressiontests/generic_views/urls.py b/tests/regressiontests/generic_views/urls.py
index db09d63692..037da42d9a 100644
--- a/tests/regressiontests/generic_views/urls.py
+++ b/tests/regressiontests/generic_views/urls.py
@@ -98,6 +98,8 @@ urlpatterns = patterns('',
# ListView
(r'^list/dict/$',
views.DictList.as_view()),
+ (r'^list/dict/paginated/$',
+ views.DictList.as_view(paginate_by=1)),
url(r'^list/authors/$',
views.AuthorList.as_view(),
name="authors_list"),