3

我有一个使用 Django CMS 运行的 Django 应用程序。我正在尝试使一个特定的子菜单不可点击。

菜单是这样的:

item1|item2|item3
            sub_item3
            sub_item3

我想要的是除了“item3”菜单项之外的所有东西都是可点击的。

我怎样才能知道 item3 本身是一个 Django CMS 页面,就像它的每个子页面一样?

这背后的想法是防止用户在单击顶部的“item3”菜单项时看到一个空白页面。

4

2 回答 2

2

以下是我如何做到这一点,以防止它链接到任何地方:

{% load cms_tags menu_tags %}
{% for child in children %}
<li>
  {% if child.is_leaf_node %}<a href="{{ child.attr.redirect_url|default:child.get_absolute_url }}">{{ child.get_menu_title }}</a>{% else %}<a href="#">{{ child.get_menu_title }}</a>{% endif %}
  {% if child.children %}
    <ul>
        {% show_menu 0 100 100 100 "menu/top-menu.html" "" "" child %}
    </ul>
    {% endif %}
</li>
{% endfor %}

在您的情况下,您可能想要一个带有类似这样的 css 的类,来自Disable a link using css

.active {
   pointer-events: none;
   cursor: default;
}
于 2013-05-03T20:33:21.230 回答
2

好的,我将前面的答案和这些链接https://groups.google.com/forum/?fromgroups=#!topic/django-cms/aS2Ew2mf8XY和文档https://django-cms.readthedocs .org/en/2.4.0/extending_cms/app_integration.html#how-it-works(导航修饰符)。

from menus.base import Modifier
from menus.menu_pool import menu_pool

class MyMode(Modifier):
    """

    """
    def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
        if post_cut:
            return nodes

        for node in nodes:
            if node.title == u'Page not clickable':
                node.no_click = True

        return nodes

menu_pool.register_modifier(MyMode)

有了这个模板

% load cms_tags menu_tags %}
{% for child in children %}
<li>
  {% if not child.no_click %}<a href="{{ child.attr.redirect_url|default:child.get_absolute_url }}">{{ child.get_menu_title }}</a>{% else %}<a href="#">{{ child.get_menu_title }}</a>{% endif %}
  {% if child.children %}
    <ul>
        {% show_menu from_level to_level extra_inactive extra_active template "" "" child %}
    </ul>
    {% endif %}
</li>
{% endfor %}

在我的主模板(base.html)中,我添加了菜单

{% show_menu 0 100 100 100 "menu.html" %}
于 2013-05-08T09:22:30.423 回答