From 5e2597cb402a09c194a456e9babc01d6da526f01 Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Sat, 10 Jun 2023 01:26:06 +0100 Subject: [PATCH] Update pagination behaviour on page explorer view to match Django standard --- wagtail/admin/tests/pages/test_explorer_view.py | 15 ++------------- wagtail/admin/views/pages/listing.py | 8 ++++++-- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/wagtail/admin/tests/pages/test_explorer_view.py b/wagtail/admin/tests/pages/test_explorer_view.py index 8a58cb488e..7da729b9cd 100644 --- a/wagtail/admin/tests/pages/test_explorer_view.py +++ b/wagtail/admin/tests/pages/test_explorer_view.py @@ -228,11 +228,7 @@ class TestPageExplorer(WagtailTestUtils, TestCase): ) # Check response - self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, "wagtailadmin/pages/index.html") - - # Check that we got page one - self.assertEqual(response.context["pages"].number, 1) + self.assertEqual(response.status_code, 404) def test_pagination_out_of_range(self): self.make_pages() @@ -242,14 +238,7 @@ class TestPageExplorer(WagtailTestUtils, TestCase): ) # Check response - self.assertEqual(response.status_code, 200) - self.assertTemplateUsed(response, "wagtailadmin/pages/index.html") - - # Check that we got the last page - self.assertEqual( - response.context["pages"].number, - response.context["pages"].paginator.num_pages, - ) + self.assertEqual(response.status_code, 404) @override_settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True) def test_no_thousand_separators_in_bulk_action_checkbox(self): diff --git a/wagtail/admin/views/pages/listing.py b/wagtail/admin/views/pages/listing.py index d3433fb6c3..953e0110e0 100644 --- a/wagtail/admin/views/pages/listing.py +++ b/wagtail/admin/views/pages/listing.py @@ -1,6 +1,7 @@ from django.conf import settings -from django.core.paginator import Paginator +from django.core.paginator import InvalidPage, Paginator from django.db.models import Count +from django.http import Http404 from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.urls import reverse @@ -90,7 +91,10 @@ def index(request, parent_page_id=None): # Pagination if do_paginate: paginator = Paginator(pages, per_page=50) - pages = paginator.get_page(request.GET.get("p")) + try: + pages = paginator.page(request.GET.get("p", 1)) + except InvalidPage: + raise Http404 show_ordering_column = request.GET.get("ordering") == "ord"