【发布时间】:2016-03-16 20:37:07
【问题描述】:
我在 Python 变量中有以下 HTML 模板:
template = """
<script>
function work()
{
alert('bla');
}
</script>
Success rate is {value:.2%} percent.
"""
我想用一些具有适当格式的十进制数替换{value:.2%}。由于我的模板可能包含大量 JavaScript 代码,因此我想避免使用 {{ 和 }} 转义大括号,因此不能直接使用 template.format(...)。
使用Template(template).substitute(...) 似乎也是不可能的,因为我想要value 的高级格式。
我可以用相应的%(value)... 语法替换{value:.2%},然后使用template % ...。但我不喜欢这种语法,因为实际模板中的大多数变量不需要高级格式,所以我想保持占位符语法简单。
所以我的问题是,是否可以在模板中使用自定义占位符,以便在必要时进行高级格式化,即只需 {{value}} 或 [[value]] 以及 {{value:.2%}} 或 [[value:.2%]] ?
编辑:最后,我想避免.format(...) 在模板包含占位符时产生的错误,例如{{dont_want_this_substituted}},传递的字典不包含值。也就是说,我只想替换某些占位符,而不是模板中出现的所有占位符。
编辑2:为了实现我想要的,我可以先用正则表达式抓取所有占位符,然后格式化它们的内容,最后在模板中进行替换。但我想知道是否存在更简单的解决方案。
编辑 3: 建议我拆分模板以避免format() 出现问题。但是,我想避免这种情况,因为模板实际上来自文件。
【问题讨论】:
-
无法预先格式化您的值吗?
-
@CodyGuldner 我可以,但我想在模板本身中指定格式。我可以使用正则表达式获取所有占位符,然后通过首先格式化它们的内容来替换它们,但我想知道是否存在更简单的解决方案。我将编辑问题以澄清这一点。
-
为什么不能有多个文件?或者只是单独存储您的模板。
标签: python string-formatting string-interpolation