0

我有一个使用 Django CMS 构建的复杂导航。在导航中,页面分为三个级别。在渲染二级导航时,我想先按顺序显示所有作为叶子节点的二级页面,然后再显示所有二级页面及其子节点。

这是树结构的示例:

  • 主页
  • 关于我们
    • 二级
    • 深入
      • 我们是谁
      • 我们所做的
    • Lorem Ipsum
  • 联系我们
    • 等等

输出应该是这样的:

<ul>
  <li>Homepage</li>
  <li>About Us
    <ul class="lvl-2">
      <!-- All leaf nodes are grouped first -->
      <li>Level Two</li>
      <li>Lorem Ipsum</li>

      <!-- Then the nodes with children after -->
      <li>In Depth
        <ul class="lvl-3">
          <li>Who we are</li>
          <li>What we do</li>
        </ul>
      </li>
    </ul>
  </li>
  <li>Contact Us
    <ul class="lvl-2">
      <li>Etcetera</li>
    </ul>
  </li>
</ul>

我更愿意找到一个不需要循环遍历节点两次的解决方案。谢谢!

4

1 回答 1

0

这是我用来显示每个节点任意数量的子节点的 menu.html 文件:

{% load menu_tags %}

{% for child in children %}
<li class="{% if child.selected or child.ancestor %}active{% endif %}{% if child.children %} dropdown{% endif %}">
    <a class="{% if child.children %}dropdown-toggle{% endif %}" {% if child.children %}data-toggle="dropdown"{% endif %} href="{% if child.children %}#{% else %}{{ child.attr.redirect_url|default:child.get_absolute_url }}{% endif %}">{{ child.get_menu_title|safe }}{% if child.children %} <b class="caret"></b>{% endif %}</a>
    {% if child.children %}
    <ul class="dropdown-menu">
        {% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
    </ul>
    {% endif %}
</li>

{% endfor %}

那里有一些 Twitter Bootstrap 特定的分类,但希望这能让你接近你所需要的。

于 2013-04-23T18:50:37.730 回答