У меня есть следующий шаблон HTML в переменной Python:
template = """
<script>
function work()
{
alert('bla');
}
</script>
Success rate is {value:.2%} percent.
"""
Я хочу подставить {value:.2%}
некоторым десятичным числом с соответствующим форматированием. Поскольку мой шаблон может содержать много JavaScript-кода, я хочу избежать экранирования фигурных скобок с помощью {{
и }}
, поэтому использование template.format(...)
напрямую не является вариантом.
Использование Template(template).substitute(...)
также представляется невозможным, потому что я хочу расширенное форматирование для value
.
Я мог бы заменить {value:.2%}
соответствующим синтаксисом %(value)...
, а затем использовать template % ...
. Но я не являюсь поклонником этого синтаксиса, потому что для большинства переменных в реальном мире шаблону не требуется расширенное форматирование, поэтому я хочу, чтобы синтаксис заполнителя был простым.
Итак, мой вопрос в том, можно ли использовать шаблоны в шаблоне, которые позволяли бы форматировать при необходимости, т.е. просто {{value}}
или [[value]]
, а также {{value:.2%}}
или [[value:.2%]]
?
Изменить: Наконец, я хочу избежать ошибок, которые создавал бы .format(...)
, когда шаблон содержит заполнители, например {{dont_want_this_substituted}}
, для которых переданный словарь не содержит значения. То есть, я хочу только заменить только определенные заполнители, а не все, что отображается в шаблоне.
Изменить 2: Чтобы добиться того, чего я хочу, я могу сначала захватить все заполнители с помощью регулярного выражения, затем отформатировать их содержимое и, наконец, сделать замену в шаблоне. Но мне интересно, существует ли более простое решение.
Изменить 3: Было предложено разбить шаблон, чтобы избежать проблем с format()
. Однако я хотел бы избежать этого, потому что шаблон фактически исходит из файла.