You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中为循环生成的侧边栏链接添加active类?

问题:动态生成的侧边栏链接添加active类

我有一个侧边栏,部分链接会在URL与链接名称匹配时添加active类,但还有一些链接是在模板中通过for循环生成的。我需要在这些链接被打开时为其添加active类,当前使用id来关联它们。

相关代码

模板代码

{% for branch in branches %}
    <li>
        <a href="{% url 'manager-branch-workers' branch.id %}">{{branch.name}}</a>
    </li>
{% endfor %}

urls.py代码

urlpatterns = [
    ...
    path('workers/<int:pk>/', views.BranchWorkerList, name='manager-branch-workers')
]

解决方案

完全可以通过对比URL中的pk参数和循环里的branch.id来实现,这里提供两种实用方案:

方案一:直接在模板中利用request对象获取URL参数

Django模板可以通过request.resolver_match.kwargs.pk获取当前URL里的pk值,将其与branch.id对比,匹配时添加active类:

{% for branch in branches %}
    <li>
        <a href="{% url 'manager-branch-workers' branch.id %}" 
           {% if request.resolver_match.kwargs.pk == branch.id|stringformat:"i" %}class="active"{% endif %}>
            {{ branch.name }}
        </a>
    </li>
{% endfor %}

注:request.resolver_match.kwargs.pk返回的是字符串类型,所以用stringformat:"i"把整数类型的branch.id转成字符串,保证对比准确。如果你的Django版本在3.1及以上,也可以直接用整数对比,不用转格式。

方案二:在视图中传递当前分支ID到模板

如果觉得模板里处理类型转换麻烦,也可以在视图层把当前分支ID传入模板上下文:

# views.py
def BranchWorkerList(request, pk):
    # 此处保留你的原有业务逻辑
    return render(request, '你的模板路径.html', {
        # 其他上下文变量
        'current_branch_id': pk
    })

然后在模板中直接对比:

{% for branch in branches %}
    <li>
        <a href="{% url 'manager-branch-workers' branch.id %}" 
           {% if current_branch_id == branch.id %}class="active"{% endif %}>
            {{ branch.name }}
        </a>
    </li>
{% endfor %}

两种方案都能满足需求,方案一无需修改视图代码更快捷,方案二逻辑更直观,可根据实际情况选择。


内容的提问来源于stack exchange,提问作者Timur Arazmedov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:02:25