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

Django模板中如何匹配带编号URL以激活对应菜单项?

解决Django导航子菜单菜单项激活问题

问题原因

你原来的写法无效,是因为模板的{% if %}条件中,"/viewer/{{ item.id }}"会被当作纯字符串字面量,不会解析其中的{{ item.id }}变量,所以永远无法和request.get_full_path匹配。

可行解决方案

方案一:通过URL路由参数匹配

你的URL配置中定义了<str:case>参数,可直接从request.resolver_match.kwargs中取出该参数,与当前循环的item.id对比(注意类型统一,case是字符串类型,若item.id是整数需转成字符串):

{% for item in cases %}   
<li>
  <a class="dropdown-item {% if request.resolver_match.kwargs.case == item.id|stringformat:"s" %}active{% endif %}" 
     href="{% url 'viewer' item.id %}">
    {{ item.patient_name }}
  </a>
</li>  
{% endfor %}

方案二:通过生成的URL路径匹配

使用{% url %}标签生成对应菜单项的URL并赋值,再与request.path对比:

{% for item in cases %}   
{% url 'viewer' item.id as item_url %}
<li>
  <a class="dropdown-item {% if request.path == item_url %}active{% endif %}" 
     href="{{ item_url }}">
    {{ item.patient_name }}
  </a>
</li>  
{% endfor %}

额外优化建议

  • 避免硬拼URL路径,改用{% url %}标签生成,能自动适配项目的URL配置变更,减少维护成本。
  • 若item.id是整数类型,务必确保和URL中case参数的字符串类型一致,可通过|stringformat:"s"过滤器或在视图中提前转换为字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:40:35