Python. Шаблонизатор для бедных
Мантра «There should be one — and preferably only one — obvious way to do it» из Zen of Python далека от реальности.
Все мы знаем, что в Питоне за долгие годы собрали аж три способа подстановки переменных в строку:
who = "Голубь Френк"
"%s постучался в стеклянные двери" % who
"{} постучался в стеклянные двери".format(who)
f"{who} постучался в стеклянные двери"
Но не все знают, что есть ещё и четвёртый способ — string.Template. Больше того, он ещё и может быть полезен иногда.
Например, если вам не нужны расширенные возможности вроде форматирования чисел или обращения к атрибутам внутри шаблона, а нужно тупо заменять строковые переменные на их значения. Да ещё и синтаксис подстановки отличается от стандартного:
CHANGEME:who постучался в стеклянные двери
Тут и пригодится string.Template:
import string
class OmskTemplate(string.Template):
delimiter = "CHANGEME:"
template = OmskTemplate("CHANGEME:who постучался в стеклянные двери")
template.substitute({ "who": "Кот Джарвис"})
'Кот Джарвис постучался в стеклянные двери'
Если нужен ещё более извращённый синтаксис — например, ==!who!==
— достаточно перекрыть атрибут класса pattern, указав в нём подходящее регулярное выражение.
★ Подписывайтесь на новые заметки.