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
相关产品推荐
相关产品推荐

