Skip to content

Commit f90839a

Browse files
add ability to override template name in tag (#11)
1 parent 45dc3aa commit f90839a

File tree

5 files changed

+33
-4
lines changed

5 files changed

+33
-4
lines changed

src/django_simple_nav/nav.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,16 @@ class Nav:
1717
items: list[NavGroup | NavItem]
1818

1919
@classmethod
20-
def render_from_request(cls, request: HttpRequest) -> str:
20+
def render_from_request(
21+
cls, request: HttpRequest, template_name: str | None = None
22+
) -> str:
2123
items = [
2224
RenderedNavItem(item, request)
2325
for item in cls.items
2426
if check_item_permissions(item, request.user) # type: ignore[arg-type]
2527
]
2628
return render_to_string(
27-
template_name=cls.template_name,
29+
template_name=template_name or cls.template_name,
2830
context={"items": items},
2931
)
3032

src/django_simple_nav/templatetags/django_simple_nav.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88

99

1010
@register.simple_tag(takes_context=True)
11-
def django_simple_nav(context: Context, nav_path: str) -> str:
11+
def django_simple_nav(
12+
context: Context, nav_path: str, template_name: str | None = None
13+
) -> str:
1214
nav = import_string(nav_path)
13-
return nav.render_from_request(request=context["request"])
15+
return nav.render_from_request(
16+
request=context["request"], template_name=template_name
17+
)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div>
2+
This is an alternate template.
3+
</div>
4+
{% include "tests/dummy_nav.html"}

tests/test_nav.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,11 @@ def test_nav_render_with_permissions(req, count_anchors, permission, expected_co
8787
rendered_template = DummyNav.render_from_request(req)
8888

8989
assert count_anchors(rendered_template) == expected_count
90+
91+
92+
def test_nav_render_from_request_with_template_name(req):
93+
req.user = AnonymousUser()
94+
95+
rendered_template = DummyNav.render_from_request(req, "tests/alternate.html")
96+
97+
assert "This is an alternate template." in rendered_template

tests/test_templatetags.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,14 @@ def test_django_simple_nav_templatetag(req, count_anchors):
1414
rendered_template = template.render(Context({"request": req}))
1515

1616
assert count_anchors(rendered_template) == 7
17+
18+
19+
def test_templatetag_with_template_name(req):
20+
template = Template(
21+
"{% load django_simple_nav %} {% django_simple_nav 'tests.navs.DummyNav' 'tests/alternate.html' %}"
22+
)
23+
req.user = AnonymousUser()
24+
25+
rendered_template = template.render(Context({"request": req}))
26+
27+
assert "This is an alternate template." in rendered_template

0 commit comments

Comments
 (0)