У меня есть следующий шаблон HTML в переменном Python:Продвинутое форматирование строки 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%]]
?
Edit: Наконец, я хочу, чтобы избежать ошибок, которые .format(...)
будут производить, когда шаблон содержит заполнители, такие как {{dont_want_this_substituted}}
, для которых переданная словарь не содержит значения. То есть, я хочу только заменить только определенные заполнители, а не все, что отображается в шаблоне.
Редактирование 2: Для достижения того, что я хочу, я могу сначала захватить все заполнители с регулярным выражением, затем отформатировать их содержимое и, наконец, сделать замену в шаблоне. Но мне интересно, существует ли более простое решение.
Редакция 3: Было предложено разделить шаблон, чтобы избежать проблем с format()
. Однако я хотел бы избежать этого, потому что шаблон фактически исходит из файла.
Невозможно предварительно отформатировать ваши значения? –
@CodyGuldner Я мог бы, но я хочу указать форматирование в самом шаблоне. Я мог бы захватить все заполнители с регулярным выражением, а затем заменить их, сначала форматируя их содержимое, но мне было интересно, существует ли более простое решение. Я отредактирую вопрос, чтобы прояснить это. –
Почему бы не иметь несколько файлов? Или просто сохраните свои шаблоны отдельно. – leewz