如何删除 wagtail 网址中的 'home'

How to remove 'home' in wagtail URLs

我有一个 wagtail 项目,根目录下有一个 'Home' 页面 (slug='home')。

还有第二个页面 'Blog',它是 'Home' (slug='blog') 的子页面。

最后,我的博客发布页面是 'Blog'(slug='blog-post-1' 等)的子页面。

blog/models.py中我有以下代码:

class BlogListingPage(Page):
    """List the Blog detail pages."""

    template = "blog/blog_listing_page.html"
    ....
    def get_context(self, request, *args, **kwargs):
        """Add custom content to our context."""
        context = super().get_context(request, *args, **kwargs)
        context['blog_pages'] = self.get_children().live()
        return context


class BlogDetailPage(Page):
    """Blog detail page."""
    template = "blog/blog_detail_page.html"
    ....

要访问我使用的博客:

<a class="nav-link" href="/blog">Blog</a>

而且效果很好。

现在,详细信息页面的 URL 是 /home/blog/blog-post-1/ 等,但该页面实际上位于 /blog/blog-post-1/

“/home”来自哪里,我该如何摆脱它?

确保 urls.py 中没有 '/home'。如果这样做,请将其替换为 ''urls.py 中的最后一行通常是:

urlpatterns.append(path('', include(wagtail_urls)))

此外,在 Wagtail 管理员中,在“设置”->“站点”中,确保您已经为您的站点选择了根页面。

您正在使用 {{ page.url_path }} 输出页面 URL。这是 Page 对象的内部字段,不打算直接用作页面 URL(因为这将取决于站点根目录的放置位置,在设置 -> 站点下) - 相反,Wagtail 将最终的 URL 计算为目标页面的 url_path(此处为 /home/blog/blog-post-1/)与根页面的 url_path/home/)之间的差异。

在模板中指定页面 URL 的正确方法是:{% pageurl page %}。 (您还需要在模板顶部添加 {% load wagtailcore_tags %}。)