Skip to content

Commit d826b6b

Browse files
add ability to create self-closing bird tags (#4)
1 parent 2c4480f commit d826b6b

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/django_bird/templatetags/django_bird.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,17 @@ def do_bird(parser: Parser, token: Token) -> BirdNode:
3131
name = bits[1].strip("'\"")
3232
attrs = bits[2:]
3333

34-
nodelist = parser.parse(("endbird",))
35-
parser.delete_first_token()
34+
if len(attrs) > 0 and attrs[-1] == "/":
35+
nodelist = None
36+
else:
37+
nodelist = parser.parse(("endbird",))
38+
parser.delete_first_token()
3639

3740
return BirdNode(name, attrs, nodelist)
3841

3942

4043
class BirdNode(template.Node):
41-
def __init__(self, name: str, attrs: list[str], nodelist: NodeList) -> None:
44+
def __init__(self, name: str, attrs: list[str], nodelist: NodeList | None) -> None:
4245
self.name = name
4346
self.attrs = attrs
4447
self.nodelist = nodelist
@@ -61,6 +64,9 @@ def render(self, context: Context) -> SafeString:
6164
return render_to_string(f"bird/{self.name}.html", component_context)
6265

6366
def render_slots(self, context: Context) -> dict[str, str]:
67+
if self.nodelist is None:
68+
return {}
69+
6470
contents: dict[str, list[str]] = {self.default_slot: []}
6571
active_slot = self.default_slot
6672

tests/test_templatetags.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ def test_rendered_attrs(
118118
rendered = t.render(context=Context(context))
119119
assert normalize_whitespace(rendered) == expected
120120

121+
def test_self_closing_tag(self, create_bird_template):
122+
create_bird_template(name="image", content="<img src='image' />")
123+
template = Template("{% bird image src='image' / %}")
124+
rendered = template.render(context=Context({}))
125+
assert rendered == "<img src='image' />"
126+
121127

122128
@pytest.mark.xfail(reason="Feature not implemented yet")
123129
class TestBirdTemplateTagFutureFeatures:

0 commit comments

Comments
 (0)