Реализовать коллапсирующую панель навигации с помощью django mptt и bootstrap
Я начал внедрять Django-mptt для использования в динамическом меню, управляемом базой данных. У меня возникла проблема с тем, как работают теги шаблонов, и я почти разобрался с ней. Предыдущий сайт хорошо работал с использованием свертывающихся меню: хотя они были громоздкими в обслуживании, они работали. Теперь требования таковы, что я должен использовать меню, управляемые данными.
На текущем сайте используется bootstrap для управления классом collapse - ограничение заключается в том, что при изменении меню все меню нуждается в корректировке. Текущий сайт имеет следующее:
<div class="sidenav-menu-heading">{% translate 'settings' %}</div>
<!-- Sidenav Accordion (Settings)-->
<!-- Settings->General-->
<a class="nav-link collapsed"
href="javascript:void(0);"
data-toggle="collapse"
data-target="#SettingsGeneralviewcollapse"
aria-expanded="false"
aria-controls="SettingsGeneralviewcollapse">
<div class="nav-link-icon">{% icon "grid" %}</div>
{% translate 'General' %}
<div class="sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="SettingsGeneralviewcollapse" data-parent="#accordionSidenav">
<nav class="sidenav-menu-nested nav accordion" id="accordionSidenavTaskMenu">
<!-- Nested Sidenav Accordion (Settings -> Organisation)-->
<a class="nav-link collapsed"
href="javascript:void(0);"
data-toggle="collapse"
data-target="#SettingsOrgviewcollapse"
aria-expanded="false"
aria-controls="SettingsOrgviewcollapse">
{% translate 'Organisation' %}
<div class="sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="SettingsOrgviewcollapse"
data-parent="#SettingsGeneralviewcollapse">
<nav class="sidenav-menu-nested nav">
<a class="nav-link"
href="{% url 'organisation_create' %}">{% translate 'Create' %}</a>
<a class="nav-link" href="{% url 'organisation_list' %}">{% translate 'List' %}</a>
</nav>
</div>
<a class="nav-link collapsed" href="javascript:void(0);"
data-toggle="collapse"
data-target="#SettingsDeptviewcollapse"
aria-expanded="false"
aria-controls="SettingsDeptviewcollapse">
{% translate 'Departments' %}
<div class="sidenav-collapse-arrow"><i class="fas fa-angle-down"></i></div>
</a>
<div class="collapse" id="SettingsDeptviewcollapse"
data-parent="#SettingsGeneralviewcollapse">
<nav class="sidenav-menu-nested nav">
<a class="nav-link"
href="{% url 'department_create' %}">{% translate 'Create' %}</a>
<a class="nav-link" href="{% url 'department_list' %}">{% translate 'List' %}</a>
<a class="nav-link"
href="{% url 'department_select' %}">{% translate 'Select' %}</a>
</nav>
</div>
</nav>
</div>
Используя django mptt - основная структура, которую я разработал, выглядит так:
{% load mptt_tags %}
<ul class="navbar-nav mr-auto">
{% recursetree menu %}
{% if node.level == 0 %}
{% if not node.is_leaf_node %}
<div class="sidenav-menu-heading">{{ node.name|capfirst }}</div>
{% endif %}
{% else %}
{% if not node.is_leaf_node %}
<div class="nav-link-icon">{% if node.icon == "none" %}{% else %}
<i class="fas {{ node.icon }}"> </i>{% endif %} {{ node.name|capfirst }}</div>
{% else %}
<a class="nav-link" href="{% if node.url == "none" %}{% else %}
{% url node.url %} {% endif %}">{{ node.name|capfirst }}</a>
{% endif %}
{% endif %}
{% if not node.is_leaf_node %}
<ul class="sidenav-menu-nested nav">
<a>{{ children }}</a>
</ul>
{% endif %}
{% endrecursetree %}
</ul>
Проблема заключается в том, как реализовать новую систему (mptt), чтобы она выглядела как старое меню.
- The easy bit is the level == 0 - that works ok.
- How to implement the class="nav-link collapsed" for an unknown level
По сути: Если есть меню верхнего уровня, я могу с этим разобраться. Это nav-link collapsed -->nav-link collapsed. Я пробовал вставлять эти секции в node.if_leaf_node и if not, но не могу нажать и развернуть.