diff --git a/wagtail/admin/templates/wagtailadmin/reports/base_report.html b/wagtail/admin/templates/wagtailadmin/reports/base_report.html
new file mode 100644
index 000000000..66388e8fe
--- /dev/null
+++ b/wagtail/admin/templates/wagtailadmin/reports/base_report.html
@@ -0,0 +1,22 @@
+{% extends "wagtailadmin/base.html" %}
+{% load i18n wagtailadmin_tags %}
+{% block titletag %}{{ title }}{% endblock %}
+
+{% block content %}
+ {% include "wagtailadmin/shared/header.html" with title=title icon=header_icon %}
+
+ {% with page_obj as pages %}
+
+
+ {% if pages %}
+ {% block listing %}
+ {% include "wagtailadmin/pages/listing/_list_explore.html" %}
+ {% endblock %}
+ {% paginate pages base_url=request.path %}
+ {% else %}
+
{% trans 'No pages available.' %}
+ {% endif %}
+
+
+ {% endwith %}
+{% endblock %}
diff --git a/wagtail/admin/templates/wagtailadmin/reports/locked_pages.html b/wagtail/admin/templates/wagtailadmin/reports/locked_pages.html
index 906d8e800..4a2e6c2aa 100644
--- a/wagtail/admin/templates/wagtailadmin/reports/locked_pages.html
+++ b/wagtail/admin/templates/wagtailadmin/reports/locked_pages.html
@@ -1,12 +1,4 @@
-{% extends "wagtailadmin/base.html" %}
-{% load i18n %}
-{% block titletag %}{% trans "Locked pages" %}{% endblock %}
-
-{% block content %}
- {% trans "Locked pages" as title %}
- {% include "wagtailadmin/shared/header.html" with title=title icon="locked" %}
-
-
- {% if pages %}
- {% include "wagtailadmin/reports/listing/_list_unlock.html" %}
-
- {% url 'wagtailadmin_reports:locked_pages' as pagination_base_url %}
- {% paginate pages base_url=pagination_base_url %}
- {% else %}
-
{% trans 'No pages have been locked.' %}
- {% endif %}
-
diff --git a/wagtail/admin/urls/reports.py b/wagtail/admin/urls/reports.py
index 652568156..0bcb13ccf 100644
--- a/wagtail/admin/urls/reports.py
+++ b/wagtail/admin/urls/reports.py
@@ -4,5 +4,5 @@ from wagtail.admin.views import reports
app_name = 'wagtailadmin_reports'
urlpatterns = [
- url(r'^locked/$', reports.locked_pages, name='locked_pages')
+ url(r'^locked/$', reports.LockedPagesView.as_view(), name='locked_pages')
]
diff --git a/wagtail/admin/views/reports.py b/wagtail/admin/views/reports.py
index eb67f3c2b..1455acfec 100644
--- a/wagtail/admin/views/reports.py
+++ b/wagtail/admin/views/reports.py
@@ -1,14 +1,30 @@
-from django.core.paginator import Paginator
-from django.shortcuts import render
+from django.utils.translation import ugettext as _
+from django.views.generic.base import TemplateResponseMixin
+from django.views.generic.list import BaseListView
+
from wagtail.core.models import UserPagePermissionsProxy
-def locked_pages(request):
- pages = UserPagePermissionsProxy(request.user).editable_pages().filter(locked=True)
+class ReportView(TemplateResponseMixin, BaseListView):
+ header_icon = ''
+ page_kwarg = 'p'
+ template_name = None
+ title = ''
+ paginate_by = 10
- paginator = Paginator(pages, per_page=10)
- pages = paginator.get_page(request.GET.get('p'))
+ def get_context_data(self, *args, object_list=None, **kwargs):
+ context = super().get_context_data(*args, object_list=object_list, **kwargs)
+ context['title'] = self.title
+ context['header_icon'] = self.header_icon
+ return context
- return render(request, 'wagtailadmin/reports/locked_pages.html', {
- 'pages': pages,
- })
+
+class LockedPagesView(ReportView):
+ template_name = 'wagtailadmin/reports/locked_pages.html'
+ title = _('Locked Pages')
+ header_icon = 'locked'
+
+ def get_queryset(self):
+ pages = UserPagePermissionsProxy(self.request.user).editable_pages().filter(locked=True)
+ self.queryset = pages
+ return super().get_queryset()