有没有办法隐藏从Wagtail管理页面树创建的URL的一部分?

时间:2019-05-11 05:53:22

标签: django wagtail

假设我已经为我的网站创建了一个博客。 Wagtail管理员中的树形结构设置如下:

主页>博客索引>博客文章

是否可以将“博客索引”页面保留在管理页面树中,但将其从URL中删除,以使我的URL看起来像这样:

主页>博客文章

我正在向博客索引页面分配一个自定义组,允许他们仅编辑他们创建的博客帖子,这就是为什么博客索引需要保留在管理员方面的树中的原因。

我已经对routablepagemixin做了一些工作,但是并没有从URL中删除任何内容,只添加了它。

1 个答案:

答案 0 :(得分:3)

我不确定RoutablePageMixin是否是解决此问题的正确方法,但这就是我以前解决此问题的方式。

这是一个如何使用RoutablePageMixinroute进行操作的示例(注意:我很快将其切碎,并且没有对其进行测试,您可能需要进行一些调整)

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