File: html.rst

package info (click to toggle)
mozjs78 78.15.0-7
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 739,892 kB
  • sloc: javascript: 1,344,214; cpp: 1,215,708; python: 526,544; ansic: 433,835; xml: 118,736; sh: 26,176; asm: 16,664; makefile: 11,537; yacc: 4,486; perl: 2,564; ada: 1,681; lex: 1,414; pascal: 1,139; cs: 879; exp: 499; java: 164; ruby: 68; sql: 45; csh: 35; sed: 18; lisp: 2
file content (51 lines) | stat: -rw-r--r-- 1,409 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
.. 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
``<img>`` tag:

.. code-block:: python

    class Image:
        def __init__(self, url):
            self.url = url

        def __html__(self):
            return '<img src="%s">' % self.url

.. code-block:: pycon

    >>> img = Image('/static/logo.png')
    >>> Markup(img)
    Markup('<img src="/static/logo.png">')

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 '<a href="/user/{}">{}</a>'.format(
                self.id, escape(self.name)
            )

.. code-block:: pycon

    >>> user = User(3, '<script>')
    >>> escape(user)
    Markup('<a href="/users/3">&lt;script&gt;</a>')