.. currentmodule:: markupsafe HTML Representations ==================== In many frameworks, if a class implements an ``__html__`` method it will be used to get the object's representation in HTML. MarkupSafe's :func:`escape` function and :class:`Markup` class understand and implement this method. If an object has an ``__html__`` method it will be called rather than converting the object to a string, and the result will be assumed safe and not escaped. For example, an ``Image`` class might automatically generate an ```` tag: .. code-block:: python class Image: def __init__(self, url): self.url = url def __html__(self): return f'' .. code-block:: pycon >>> img = Image("/static/logo.png") >>> Markup(img) Markup('') Since this bypasses escaping, you need to be careful about using user-provided data in the output. For example, a user's display name should still be escaped: .. code-block:: python class User: def __init__(self, id, name): self.id = id self.name = name def __html__(self): return f'{escape(self.name)}' .. code-block:: pycon >>> user = User(3, "