在Django CMS中如何将没有子节点的导航节点与那些具有的子节点分开?

时间:2013-04-23 18:23:50

标签: django django-cms django-mptt

我有一个复杂的导航,我正在用Django CMS构建。在导航中,有三个级别的页面。渲染2级导航时,我想首先按顺序显示所有2级页面,然后显示所有2级页面及其子页面。

以下是树结构的示例:

  • 主页
  • 关于我们
    • 二级
    • 深度
      • 我们是谁
      • 我们做什么
    • 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>

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

1 个答案:

答案 0 :(得分: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特定的分类,但希望这会让你接近你需要的。