没有子级时如何在导航中显示页面的同级?

时间:2019-04-11 20:46:35

标签: python django wagtail

我正在尝试在Django / Wagtail中渲染动态菜单。到目前为止,它运行良好,但是当我遍历页面树并到达最后一个孩子时,菜单消失了。

我想知道是否有一种编写代码的方法,以便当用户单击所有页面并到达一个没有子代的页面时,我是否有可能获取该页面的同级并显示那些链接而不是空白?还是我有办法告诉w,如果页面没有孩子,请渲染页面的同级兄弟?

这样,即使有人在最后一个孩子上,也可以轻松浏览页面。

到目前为止,我正在使用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 :(得分:0)

以下仅使用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>
相关问题