0

Django CMS で構築している複雑なナビゲーションがあります。ナビゲーションには、3 つのレベルのページがあります。レベル 2 ナビゲーションをレンダリングするときは、最初にリーフ ノードであるすべてのレベル 2 ページを順番に表示し、次にすべてのレベル 2 ページとその子を表示したいと思います。

ツリー構造の例を次に示します。

  • ホームページ
  • 私たちに関しては
    • レベル 2
    • 詳細
      • 私たちは誰ですか
      • 私達がすること
    • ロレム・イプサム
  • お問い合わせ
    • その他

出力は次のようになります。

<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>

ノードを 2 回ループする必要のない解決策を見つけたいと思います。ありがとう!

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 に答える