HTML表現—MarkupSafeドキュメント

提供:Dev Guides
Markupsafe/docs/1.1.x/html
移動先:案内検索

HTML表現

多くのフレームワークでは、クラスが__html__メソッドを実装している場合、それを使用してHTMLでオブジェクトの表現を取得します。 MarkupSafeの escape()関数と Markup クラスは、このメソッドを理解して実装します。 オブジェクトに__html__メソッドがある場合、オブジェクトを文字列に変換するのではなく呼び出され、結果は安全であると見なされ、エスケープされません。

たとえば、Imageクラスは<img>タグを自動的に生成する場合があります。

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

    def __html__(self):
        return '<img src="%s">' % self.url
>>> img = Image('/static/logo.png')
>>> Markup(img)
Markup('<img src="/static/logo.png">')

これはエスケープをバイパスするため、出力でユーザー提供のデータを使用する場合は注意が必要です。 たとえば、ユーザーの表示名はエスケープする必要があります。

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)
        )
>>> user = User(3, '<script>')
>>> escape(user)
Markup('<a href="/users/3">&lt;script&gt;</a>')