HTML 表示 — MarkupSafe 文档

来自菜鸟教程
Markupsafe/docs/2.0.x/html /
机器人讨论 | 贡献2021年10月31日 (日) 04:24的版本 (Page commit)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至:导航、​搜索

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">&lt;script&gt;</a>')