Есть ли способ скрыть часть URL, созданного из дерева страниц Wagtail? - PullRequest
2 голосов
/ 11 мая 2019

Допустим, я создал блог для своего сайта. Настройка древовидной структуры в админке Wagtail выглядит следующим образом:

Домашняя страница> Список блогов> Запись блога

Можно ли сохранить страницу индекса блога в дереве страницы администратора, но удалить ее из URL, чтобы мой URL выглядел следующим образом:

Домашняя страница> Запись блога

Я назначаю пользовательскую группу на странице индекса блога, которая позволяет им редактировать только созданные ими посты блога, поэтому индекс блога должен оставаться в дереве на стороне администратора.

Я немного поработал с routablepagemixin, но не для того, чтобы что-то исключить из URL, только добавлю к нему.

1 Ответ

3 голосов
/ 11 мая 2019

Я не совсем уверен, является ли 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.

...