在Django中设置当前导航菜单项的样式

时间:2015-04-07 08:21:41

标签: javascript jquery html django menu

我想在Django中设置当前活动的子菜单项。我想知道我该怎么做? 我可以想到两种方式:

  • Django Side:我将当前地址与链接进行比较,然后在Django模板中添加
  • jQuery方面:Django模板对活动菜单项没有任何了解,我使用jQuery突出显示

我更倾向于采用jQuery方式,但我的思维方式是好的吗?是不是不推荐这种解决方案?

2 个答案:

答案 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)

但如果您的网址非常不同,这可能是您尝试做的最简单的方法之一