.. 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, "