我有一个使用Django CMS运行的Django应用程序。 我试图让一个特定的子菜单不可点击。
菜单是这样的:
item1|item2|item3
sub_item3
sub_item3
我想要的是除了“item3”菜单项外,一切都是可点击的。
我如何实现这一点知道item3是一个Django CMS页面本身和每个子页面一样?
这背后的想法是防止用户在点击顶部的“item3”菜单项时看到空白页面。
答案 0 :(得分: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 %}
在你的情况下,你可能想要一个来自Disable a link using css
的类似css的课程.active {
pointer-events: none;
cursor: default;
}
答案 1 :(得分: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" %}