When clicking on a page in explorer, it shows a list of its subpages by default. This also applies to page models with subpage_types = []
. This is confusing, and it's better to redirect the user to the edit page instead of showing him an empty list of subpages.
To achieve this, we need to create middleware.py
and add it to MIDDLEWARE
in base.py
(for ex. "pages.middleware.RedirectToEditMiddleware"
if we have our file in /pages/middleware.py
).
Here is a code that allows us to fix this issue:
from django.http import HttpResponseRedirect
from django.urls import reverse
from wagtail.models import Page
class RedirectToEditMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if '/admin/pages/' in request.path:
page_id = request.resolver_match.kwargs.get('parent_page_id')
if page_id is not None:
page = Page.objects.get(id=page_id)
if not page.specific.allowed_subpage_models():
return HttpResponseRedirect(reverse('wagtailadmin_pages:edit', args=(page_id,)))
return response
`
Top comments (0)