HTML 表示 — MarkupSafe 文档
来自菜鸟教程
Markupsafe/docs/1.1.x/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"><script></a>')