HTML表現—MarkupSafeドキュメント
提供:Dev Guides
Markupsafe/docs/2.0.x/html
HTML表現
多くのフレームワークでは、クラスが__html__
メソッドを実装している場合、それを使用してHTMLでオブジェクトの表現を取得します。 MarkupSafeの escape()関数と Markup クラスは、このメソッドを理解して実装します。 オブジェクトに__html__
メソッドがある場合、オブジェクトを文字列に変換するのではなく呼び出され、結果は安全であると見なされ、エスケープされません。
たとえば、Image
クラスは<img>
タグを自動的に生成する場合があります。
class Image:
def __init__(self, url):
self.url = url
def __html__(self):
return f'<img src="{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 f'<a href="/user/{self.id}">{escape(self.name)}</a>'
>>> user = User(3, "<script>")
>>> escape(user)
Markup('<a href="/users/3"><script></a>')