Как добавить поддержку многоуровневого меню в трясогузку (с поддержкой страниц, не основанных на трясогузке) - PullRequest
1 голос
/ 08 июля 2019

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

  1. Например, путем непосредственного указания относительного URL-адреса страницы регистрации, например «/ account / registration»)
  2. Например, путем непосредственного указания абсолютного URL-адреса для внешней страницы, такой как «www.stackoverflow.com»

Я нашел этот очень интересный проект: https://github.com/rkhleics/wagtailmenus К сожалению, это не поддерживает подменю в главном меню.

1 Ответ

2 голосов
/ 08 июля 2019

Одна вещь о Wagtail - то, что я бы назвал деревом данных, состоит только из страниц (оно называется деревом страниц ). Это дерево используется в качестве основы для навигации, но, конечно, иногда вы можете захотеть, чтобы элемент навигации в этом дереве был чем-то отличным от страницы. Я выполняю то, что вы хотите сделать, используя подклассы Page:

from django.http import HttpResponseRedirect

class Node(Page):

    subpage_types = [your subpage types]
    parent_page_types = [your parent page types]

    link = models.CharField(max_length=255, default='', blank='True')

    content_panels = Page.content_panels + [
        FieldPanel('link')
    ]    

    def serve(self, request):
        if self.link is not None:
            return HttpResponseRedirect(self.link)
        else:
            pass

И в шаблоне:

{% for item in menu_items %}
    <li>
        <a href="{% if item.specific.link and item.specific.link != '' %}{{ item.specific.link }}{% else %}{% pageurl item %}{% endif %}">{{ item.title }
        </a>
    </li>
{% endfor %}
...