import flask flask.Markup(base='', encoding=None, errors='strict')
base=''
- строка HTML-разметки, encoding=None
- кодировка,errors='strict'
- обработчик ошибок кодировки.Класс Markup()
модуля flask
помечает строку с HTML-разметкой как безопасный без экранирования. Чтобы экранировать текст, необходимо использовать метод класса Markup.escape()
.
>>> Markup("Hello, <em>World</em>!") # Markup('Hello, <em>World</em>!') >>> Markup(42) # Markup('42') >>> Markup.escape("Hello, <em>World</em>!") # Markup('Hello <em>World</em>!')
При этом в шаблоне не нужно отменять экранирование (например {{ value|safe }}
) для переменной, помеченной классом Markup()
как безопасной для вставки в шаблон.
Класс Markup()
реализует интерфейс __html__()
, используемый некоторыми фреймворками. Передача объекта, реализующего __html__()
, обернет вывод этого метода, отметив его безопасным.
class Foo: def __html__(self): return '<a href="/foo">foo</a>' >>> Markup(Foo()) # Markup('<a href="/foo">foo</a>')
Класс Markup()
представляет собой подкласс str
. Он имеет те же методы, но не принимает аргументов и возвращает экземпляр HTML-разметки.
>>> Markup("<em>%s</em>") % ("foo & bar",) # Markup('<em>foo & bar</em>') >>> Markup("<em>Hello</em> ") + "<foo>" # Markup('<em>Hello</em> <foo>')
flask.Markup()
.Markup.escape()
- экранирует строку.Markup.striptags()
- удаляет теги и нормализует пробелы.Markup.unescape()
- преобразует экранированную разметку обратно в текстовую строку.Markup.escape()
:Метод класса Markup.escape()
экранирует строку, переданную в конструктор класса. Вызывает функцию flask.escape()
и гарантирует, что для подклассов будет возвращен правильный тип.
Markup.striptags()
:Метод Markup.striptags()
сначала преобразует экранированную разметку обратно в текстовую строку, а потом удаляет теги и нормализует пробелы до одиночных.
Markup("Main » <em>About</em>").striptags() 'Main » About'
Markup.unescape()
:Метод Markup.unescape()
преобразует экранированную разметку обратно в текстовую строку. При этом объекты HTML заменяются символами, которые они представляют.
>>> Markup("Main » <em>About</em>").unescape() # 'Main » <em>About</em>'