Skip to content

Commit 14322d1

Browse files
Merge pull request #134 from mnitchie/master
fix: Explicit kwargs should take precedence over resolver_kwargs
2 parents 8d574f5 + fbc693c commit 14322d1

File tree

4 files changed

+44
-1
lines changed

4 files changed

+44
-1
lines changed

active_link/templatetags/active_link_tags.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ def active_link(
4343
if hasattr(request, "resolver_match") and hasattr(request.resolver_match, "kwargs"):
4444
resolver_kwargs = request.resolver_match.kwargs
4545

46-
kwargs.update(resolver_kwargs)
46+
# Use resolver_kwargs as defaults, but explicitly provided kwargs (like pk)
47+
# take precedence
48+
kwargs = {**resolver_kwargs, **kwargs}
4749

4850
active = False
4951
views = viewnames.split("||")
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% load active_link_tags %}
2+
<!DOCTYPE html>
3+
<html lang="en">
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>Multiple specific links test</title>
8+
</head>
9+
<body>
10+
<div id="link-pk-1" class="{% active_link 'detailed-action-multiple-specific' pk=1 %}">Link to pk=1</div>
11+
<div id="link-pk-2" class="{% active_link 'detailed-action-multiple-specific' pk=2 %}">Link to pk=2</div>
12+
<div id="link-pk-3" class="{% active_link 'detailed-action-multiple-specific' pk=3 %}">Link to pk=3</div>
13+
</body>
14+
</html>
15+

tests/test_tags.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,22 @@ def test_404_page_with_missing_resolver_match(self):
101101
# Should render the inactive class without throwing an error
102102
self.assertIn('class="not-active"', html)
103103
self.assertNotIn('class="active"', html)
104+
105+
def test_multiple_links_with_specific_kwargs(self):
106+
"""
107+
Test that multiple active_link tags on the same page with different
108+
explicit kwargs are evaluated independently.
109+
110+
When viewing a page with the URL /detailed/action/multiple-specific/2/,
111+
and the page has `active_link` tags for pk=1, pk=2, and pk=3. Only the
112+
link with pk=2 should be active. The resolver_kwargs from the current
113+
URL should serve as defaults but not override the explicit pk values.
114+
"""
115+
content = self.reverse_helper("detailed-action-multiple-specific", {"pk": 2})
116+
117+
# Only the link with pk=2 should be active
118+
self.assertIn('id="link-pk-2" class="active"', content)
119+
120+
# Links with pk=1 and pk=3 should NOT be active
121+
self.assertNotIn('id="link-pk-1" class="active"', content)
122+
self.assertNotIn('id="link-pk-3" class="active"', content)

tests/urls.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,11 @@
4141
TemplateView.as_view(template_name="detailed_action_kwargs_multiple.html"),
4242
name="detailed-action-multiple",
4343
),
44+
path(
45+
r"detailed/action/multiple-specific/<int:pk>/",
46+
TemplateView.as_view(
47+
template_name="detailed_action_kwargs_multiple_specific.html"
48+
),
49+
name="detailed-action-multiple-specific",
50+
),
4451
]

0 commit comments

Comments
 (0)