Как отобразить братьев и сестер страницы в навигации, когда нет детей? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь визуализировать динамическое меню в Django / Wagtail. Пока это работает хорошо, но когда я пересекаю дерево страниц и добираюсь до последнего потомка, меню исчезает.

Мне интересно, есть ли способ написать код, чтобы, когда пользователь перебрал все страницы и перешел на страницу без дочерних элементов, я смог получить братьев и сестер на этой странице и отобразить эти ссылки вместо того, чтобы быть пустым? Или я могу сказать трясогузке, что если на странице нет дочерних элементов, отобразить родных братьев на этой странице?

Таким образом, кто-то может легко перемещаться по страницам, даже если они находятся на последнем ребенке.

Я использую wagtailmenus для рендеринга flat_menu, чтобы сделать это до сих пор. Я смог заставить это работать, выполнив следующее:

{% for content in page.get_siblings %}

Это сработало, чтобы получить братьев и сестер в качестве эксперимента, но, конечно, логика больше не существует, чтобы получить детей. Ниже мой текущий код - я действительно не знаю, что я могу сделать в закомментированных 3 строках кода для достижения моей цели. Я попробовал несколько вещей, но мне не повезло.

{% load static wagtailcore_tags menu_tags %}

<aside class="sidebar sidebar-boxed sidebar-dark">
  <ul class="nav sidenav dropable sticky">
      {% for content in page.get_children %}
        <li class="{{ content.active_class }}">
          <a href="{% pageurl content %}">{{ content.title }}</a>
          #{% if content.has_children_in_menu %}
            #{{ content.sub_menu.render_to_template }}
          #{% endif %}
        </li>
      {% endfor %}
  </ul>
</aside>

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

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

1 Ответ

0 голосов
/ 12 апреля 2019

Следующее использует только иерархию страниц Wagtail.Он ограничен двухуровневой иерархией.

{% load static wagtailcore_tags %}

<aside class="sidebar sidebar-boxed sidebar-dark">
  <ul class="nav sidenav dropable sticky">
      {% for item in page.get_children.live.in_menu %}
        <li class="{{ item.active_class }}">
          <a href="{% pageurl item %}">{{ item.title }}</a>
          {% for subitem in item.get_children.live.in_menu %}
             <li><a href="{% pageurl subitem %}{{ subitem.title }}</a></li>
          {% empty %}
             {% for sib in item.get_siblings.live.in_menu %}
                 <li><a href="{% pageurl sib %}{{ sib.title }}</a></li>
             {% endfor %}
          {% endfor %
        </li>
      {% endfor %}
  </ul>
</aside>
...