Как удалить «дом» в URL трясогузки - PullRequest
0 голосов
/ 16 января 2020

У меня есть проект трясогузки со страницей 'Home' в root (slug = 'home').

Есть вторая страница 'Blog', которая является дочерней по отношению к 'Home' (slug = 'blog').

Наконец, у меня есть страницы для публикации блогов, которые являются потомками 'Blog' (slug = 'blog-post-1' et c.).

В 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/ и c, но страница действительно находится по адресу /blog/blog-post-1/.

Откуда берется «/ home» и как мне от него избавиться?

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Вы выводите URL страницы, используя {{ page.url_path }}. Это внутреннее поле объекта Page, и оно не предназначено для непосредственного использования в качестве URL-адреса страницы (поскольку это будет зависеть от того, где был размещен сайт root, в разделе «Настройки» -> «Сайты») - скорее, Wagtail вычисляет окончательный URL-адрес как разницу между url_path (/home/blog/blog-post-1/ здесь) целевой страницы и url_path (/home/) root страницы.

Правильный способ указать URL-адрес страницы в шаблоне есть: {% pageurl page %}. (Вам также понадобится {% load wagtailcore_tags %} вверху шаблона.)

0 голосов
/ 16 января 2020

Убедитесь, что у вас нет '/home' в urls.py. Если вы это сделаете, замените его на ''. Последняя строка в urls.py обычно будет выглядеть так:

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

Кроме того, в админке Wagtail, в Настройки -> Сайты, убедитесь, что вы выбрали страницу root для своего сайта.

...