Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #19240 -- include pagination error details in ListView 404

Thanks to seawolf for the patch
  • Loading branch information...
commit 5a00a57aa591c766f5ee1d8c59b64618d74fe191 1 parent 0a49e61
Preston Holmes ptone authored
7 django/views/generic/list.py
View
@@ -50,9 +50,10 @@ def paginate_queryset(self, queryset, page_size):
try:
page = paginator.page(page_number)
return (paginator, page, page.object_list, page.has_other_pages())
- except InvalidPage:
- raise Http404(_('Invalid page (%(page_number)s)') % {
- 'page_number': page_number
+ except InvalidPage as e:
+ raise Http404(_('Invalid page (%(page_number)s): %(message)s') % {
+ 'page_number': page_number,
+ 'message': e.message,
})
def get_paginate_by(self, queryset):
12 tests/regressiontests/generic_views/list.py
View
@@ -2,6 +2,7 @@
from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase
+from django.test.utils import override_settings
from django.views.generic.base import View
from .models import Author, Artist
@@ -171,8 +172,17 @@ def test_paginated_list_view_does_not_load_entire_table(self):
with self.assertNumQueries(3):
self.client.get('/list/authors/notempty/paginated/')
+ @override_settings(DEBUG=True)
+ def test_paginated_list_view_returns_useful_message_on_invalid_page(self):
+ # test for #19240
+ # tests that source exception's message is included in page
+ self._make_authors(1)
+ res = self.client.get('/list/authors/paginated/2/')
+ self.assertEqual(res.status_code, 404)
+ self.assertEqual(res.context.get('reason'),
+ "Invalid page (2): That page contains no results")
+
def _make_authors(self, n):
Author.objects.all().delete()
for i in range(n):
Author.objects.create(name='Author %02i' % i, slug='a%s' % i)
-
Please sign in to comment.
Something went wrong with that request. Please try again.