我想在Django中设置当前活动的子菜单项。我想知道我该怎么做? 我可以想到两种方式:
我更倾向于采用jQuery方式,但我的思维方式是好的吗?是不是不推荐这种解决方案?
答案 0 :(得分:20)
@Liarez在answer写道:
在这个例子中,我对3个网址有所区别,如果你有一个类似于/ posts / whatever / contacts的网址,这可能会很麻烦,因为有2个地方会返回True(第2和第3个li)
所以这是处理此问题的更好选择:
{% with request.resolver_match.url_name as url_name %}
<ul id="menu">
<li class="{% if url_name == 'home' %}active{% endif %}">Home</li>
<li class="{% if url_name == 'blog' %}active{% endif %}">Posts</li>
<li class="{% if url_name == 'contact' %}active{% endif %}">Contact</li>
</ul>
{% endwith %}
现在我们的url路径中没有重复问题。这将有效,假设你已经用这样的名字写了你的网址模式:
url(r'^$', 'home_view', name=u'home'),
url(r'^posts/$', 'posts_view', name=u'blog'),
url(r'^contact/$', 'contact_view', name=u'contact'),
答案 1 :(得分:4)
在菜单中显示有效标签&amp;子菜单我在模板中使用 request.path ,并使用一个名为 active 的类。
当你这样做时
{{request.path}}
在模板中,它返回您所在的网址(类似/posts/1234
)。因此,在您的HTML中,您可以执行以下操作:
<ul id="menu">
<li class="{% if request.path == '/' %}active{% endif %}">Home</li>
<li class="{% if 'posts' in request.path %}active{% endif %}">Posts</li>
<li class="{% if 'contact' in request.path %}active{% endif %}">Contact</li>
</ul>
在这个例子中,我对3个网址有所区别,如果你有一个类似 / posts / whatever / contacts 的网址,这可能会很麻烦,因为有2个地方会返回True(第2和第2个)第3个li)
但如果您的网址非常不同,这可能是您尝试做的最简单的方法之一