diff --git a/Pipfile b/Pipfile index aa760f3..441ac17 100644 --- a/Pipfile +++ b/Pipfile @@ -9,6 +9,7 @@ twine = "*" [packages] more-itertools = "*" +markupsafe = "*" [requires] python_version = "3.8" diff --git a/htbuilder/__init__.py b/htbuilder/__init__.py index f6f5759..1cc326c 100644 --- a/htbuilder/__init__.py +++ b/htbuilder/__init__.py @@ -59,6 +59,7 @@ """ +import markupsafe from more_itertools import collapse from .funcs import func @@ -146,10 +147,14 @@ def __delattr__(self, name): def __str__(self): args = { "tag": _clean_name(self._tag), - "attrs": " ".join( - [f'{_clean_name(k)}="{v}"' for k, v in self._attrs.items()] - ), - "children": "".join([str(c) for c in self._children]), + "attrs": " ".join([ + f'{_clean_name(k)}="{markupsafe.escape(v)}"' + for k, v in self._attrs.items() + ]), + "children": "".join([ + markupsafe.escape(c) if isinstance(c, str) else str(c) + for c in self._children + ]), } if self._is_empty: