Как добавить поддержку многоуровневого меню в трясогузку (с поддержкой страниц, не основанных на трясогузке)
Как я могу добавить поддержку пользовательских меню, которые будут работать и со страницами, не основанными на Wagtail.
- Например, указав непосредственно относительный URL-адрес страницы регистрации, такой как "/ account / registration")
- Например, путем прямого указания абсолютного URL-адреса внешней страницы, такой как "www.stackru.com".
Я нашел этот очень интересный проект: https://github.com/rkhleics/wagtailmenus
К сожалению, это не поддерживает подменю в главном меню.
1 ответ
Решение
Одна вещь о 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 %}