Я не совсем уверен, является ли RoutablePageMixin
верным путем, но вот как я решил это раньше.
Вот пример того, как вы могли бы сделать это с RoutablePageMixin
и route
(Примечание: я довольно быстро собрал все это вместе и не проверял, вам, возможно, потребуется выполнить некоторые настройки)
from django.http import HttpResponseRedirect
from wagtail.contrib.routable_page.models import RoutablePageMixin, route
from wagtail.core.models import Page
from blog.models import BlogPage
class HomePage(RoutablePageMixin, Page):
"""A home page class."""
# HomePage Fields here...
# This route will collect the blog slug
# We'll look for the live BlogPost page.
@route(r"^(?P<blog_slug>[-\w]*)/$", name="blog_post")
def blog_post(self, request, blog_slug, *args, **kwargs):
try:
# Get the blog page
blog_page = BlogPage.objects.live().get(slug=blog_slug)
except BlogPage.DoesNotExist:
# 404 or post is not live yet
return HttpResponseRedirect("/")
except Exception:
# Handle your other exceptions here; here's a simple redirect back to home
return HttpResponseRedirect("/")
# Additional logic if you need to perform something before serving the blog post
# Let the blog post page handle the serve
return blog_page.specific.serve(request, *args, **kwargs)
Еще одна вещь, которую стоит отметить: вы захотите изменить URL карты сайта на своих оригинальных страницах постов в блоге, чтобы они не отображались как /blog/blog-slug/
внутри sitemap.xml
.