动态活动菜单项 Django

1 投票
2 回答
2965 浏览
提问于 2025-04-17 21:17

我创建了一个模板标签,用来给每个菜单项返回“激活”状态或者什么都不返回。如果我把每个网址写死,它就能正常工作,比如这里:

 <li class="{% active request '^/danmark/$' %}"><a href="/danmark/"> Hele Danmark</a>

但是如果我使用动态网址,就不会给任何菜单项添加“激活”类,比如网址是 ^/danmark/{{a.area}}/$,就像这里:

 {% for a in all_areas %}
        <li class="{% active request '^/danmark/{{a.area}}/$' %} "><a href= "/danmark/{{a.area}}/">{{a.area}} </a></li>     
    {% endfor %}

还有模板标签的代码:

from django import template
register = template.Library()

@register.simple_tag
def active(request, pattern):
   import re
   if re.search(pattern, request.path):
      return 'active'
   return ''

那我该怎么做呢?

2 个回答

0

为什么不在你的视图里放一些信号呢,比如:

active = 'danmark'

然后在模板里你可以这样做:

<li{% if active=='danmark' %} class="active"{% endif %}><a href="/danmark/"> Hele Danmark</a></li>
6

你可以试试这个

{% 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 == 'about' %}active{% endif %}">About</li>
    <li class="{% if url_name == 'employer' %}active{% endif %}">Employer</li>
</ul>
 {% endwith %} 

你的网址应该像这样

url(r'$','home_view', name='home'),
url(r'about/$','about_view', name='about'),
url(r'employer/$','employer_view', name='employer')

撰写回答