【问题标题】:How to remove 'home' in wagtail URLs如何删除鹡鸰 URL 中的“家”
【发布时间】:2020-01-16 13:13:20
【问题描述】:

我有一个 wagtail 项目,在根 (slug='home') 有一个“主页”页面。

第二个页面“博客”是“主页”的子页面 (slug='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”是从哪里来的,我该如何摆脱它?

【问题讨论】:

  • 如何输出页面 URL? (你在使用page.url_path吗?)
  • @gasman 是的!你是怎么猜到的?

标签: wagtail


【解决方案1】:

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

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

【讨论】:

  • 知道了。谢谢。在我的 html 中:{% for post in blog_pages %} {% pageurl post %}
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多