You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django下拉菜单中移除或隐藏「设置和工具」子菜单?

如何移除Django下拉菜单中的「设置和工具」子菜单

问题描述

我是Python Django新手,想了解如何隐藏或移除下拉菜单中的「设置和工具」子菜单。当前使用的模板代码会渲染出包含该子菜单的页面,希望能将其移除或注释掉。

相关模板文件

generic_subnavigation.html

{% load common_tags %}
{% load navigation_tags %}

{% if link|common_get_type == "<class 'mayan.apps.navigation.classes.Menu'>" %}
    <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="true">
            {% if link.icon %}{{ link.icon.render }}{% endif %}
            {{ link.label }}
            <span class="caret"></span>
        </a>
        <ul class="dropdown-menu">
            {% navigation_resolve_menu name=link.name as sub_menus_results %}
            {% for sub_menu_results in sub_menus_results %}
                {% for link_group in sub_menu_results.link_groups %}
                    {% with '' as li_class_active %}
                    {% with link_group.links as object_navigation_links %}
                        {% include 'navigation/generic_navigation.html' %}
                    {% endwith %}
                    {% endwith %}
                {% endfor %}
            {% endfor %}
        </ul>
    </li>
{% else %}
    {% if as_li %}
        <li class="{% if link.active and li_class_active %}{{ li_class_active }}{% endif %}">
    {% endif %}
        {% include link_template|default:'navigation/generic_link_instance.html' %}
    {% if as_li %}
        </li>
    {% endif %}
{% endif %}
{% if link.separator %}
    <li role="separator" class="divider"></li>
{% elif link.text_span %}
    <li class="text-center link-text-span {{ link.html_extra_classes }}" >{{ link.text }}</li>
{% else %}
    {% if link.disabled %}
        <a class="{{ link.html_extra_classes }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %} disabled" disabled='disabled' style="cursor: default;" href="#">{% if link.icon %}{{ link.icon.render }}{% endif %} {{ link.text }}{% if link.error %} - {{ link.error }}{% endif %}</a>
    {% else %}
        <a
            class="{{ link.html_extra_classes }} {% if link_classes %}{{ link_classes }} {% else %}btn {% if 'dangerous' in link.tags %}btn-danger{% else %}btn-primary{% endif %} btn-xs{% endif %} {% if link.active %}{{ link_class_active }}{% endif %} {% if 'new_window' in link.tags %}new_window{% endif %}"
            {% for key,value in link.html_data.items %}
                data-{{ key }}={{ value }}
            {% endfor %}

        {% if link.html_extra_attributes %}{{ link.html_extra_attributes }}{% endif %}
        {% if link.url %}href="{{ link.url }}"{% endif %}
        >{% if link.icon and not hide_icon %}{{ link.icon.render }}{% endif %}
        {{ link.text|default:'' }}{% if link.badge_text %}&nbsp;<span class="badge">{{ link.badge_text }}</span>
        {% endif %}{% if link.error %} - {{ link.error }}{% endif %}
        </a>
    {% endif %}
{% endif %}

generic_navigation.html

{% load i18n %}

{% for link in object_navigation_links %}
    {% include 'navigation/generic_subnavigation.html' %}
{% endfor %}

action_dropdown.html

{% load i18n %}

{% load common_tags %}

<button aria-expanded="false" aria-haspopup="true" class="{{ action_dropdown_classes|default:"btn btn-default btn-danger"}} btn-sm dropdown-toggle" data-toggle="dropdown" type="button">
    {% if action_dropdown_label %}
        {{ action_dropdown_label }}
    {% else %}
        {% trans 'Actions' %}
    {% endif %}
    <span class="caret"></span>
    <span class="sr-only">{% trans 'Toggle Dropdown' %}</span>
</button>
<ul class="dropdown-menu" role="menu">
    {% for menus_link_result in action_menus_link_results %}
        {% if not action_menu_disable_labels and action_menus_link_results|length > 1 %}
            <li class="dropdown-header"><strong>{{ menus_link_result.menu.label }}</strong></li>
            <li class="divider"></li>
        {% endif %}

        {% for link_group in menus_link_result.link_groups %}
            {% if navigation_object_list %}

                {% ifchanged link_group.object %}
                {% common_get_object_verbose_name obj=link_group.object as link_group_object_verbose_name %}
                    {% if link_group_object_verbose_name %}<li class="dropdown-header">{{ link_group_object_verbose_name }}</li>{% endif %}
                {% endifchanged %}
            {% endif %}

            {% with link_group.links as object_navigation_links %}
            {% with 'true' as as_li %}
            {% with 'true' as hide_active_anchor %}
            {% with 'btn btn-sm navigation-btn-dropdown' as link_classes %}
                {% include 'navigation/generic_navigation.html' %}
            {% endwith %}
            {% endwith %}
            {% endwith %}
            {% endwith %}

            {% if not forloop.last and link_group %}
                <li class="divider"></li>
            {% endif %}

        {% endfor %}
        {% if not forloop.last and menus_link_result %}
            <li class="divider"></li>
        {% endif %}
    {% endfor %}
</ul>

解决方案

方法1:精准过滤「设置和工具」菜单(推荐)

修改generic_subnavigation.html中的菜单渲染判断条件,添加对菜单标签的过滤,让模板跳过「设置和工具」菜单的渲染:

{% if link|common_get_type == "<class 'mayan.apps.navigation.classes.Menu'>" and link.label != "设置和工具" %}

如果项目使用多语言,建议用翻译标签确保兼容性:

{% load i18n %}
{% if link|common_get_type == "<class 'mayan.apps.navigation.classes.Menu'>" and link.label != _("设置和工具") %}

方法2:临时注释掉子菜单渲染(快速方案)

如果只是临时隐藏,直接用Django模板注释语法{# ... #}把「设置和工具」对应的菜单块注释掉。或者如果要隐藏所有子菜单,注释掉generic_subnavigation.html中<ul class="dropdown-menu">到</ul>之间的所有内容:

{# <ul class="dropdown-menu">
    {% navigation_resolve_menu name=link.name as sub_menus_results %}
    {% for sub_menu_results in sub_menus_results %}
        {% for link_group in sub_menu_results.link_groups %}
            {% with '' as li_class_active %}
            {% with link_group.links as object_navigation_links %}
                {% include 'navigation/generic_navigation.html' %}
            {% endwith %}
            {% endwith %}
        {% endfor %}
    {% endfor %}
</ul> #}

方法3:从菜单注册层面移除(规范方案)

从代码结构看这是Mayan EDMS的项目,更规范的做法是在菜单注册的代码中移除「设置和工具」菜单。找到对应app下的menu.py文件,取消该菜单的注册或移除其与父菜单的关联,避免修改模板文件。


内容的提问来源于stack exchange,提问作者Jix Tang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:05:34