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
This commit is contained in:
parent
b37d867929
commit
ff8711a825
|
@ -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:
|
||||
|
|
|
@ -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
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"),
|
||||
|
|
Loading…
Reference in New Issue