我尝试用Python的模板替换{{var}}
的变量。
from string import Template
class CustomTemplate(Template):
delimiter = '{{'
pattern = r'''
\{\{(?:
(?P<escaped>\{\{)|
(?P<named>[_a-z][_a-z0-9]*)\}\}|
(?P<braced>[_a-z][_a-z0-9]*)\}\}|
(?P<invalid>)
)
'''
replacement_dict = {
"test": "hello"
}
tpl = '''{
"unaltered": "{{foo}}",
"replaced": "{{test}}"
}'''
a = CustomTemplate(tpl)
b = a.safe_substitute(replacement_dict)
print(b)
输出:
{
"unaltered": "{{foo",
"replaced": "hello"
}
正如你所看到的,{{foo}}
变量(不是替换的一部分)的右括号被剪掉了。我想这是正则表达式的编写方式(右括号\}\}
)?
我想用模板解决这个问题,而不是用任何其他外部库。
2条答案
按热度按时间z9smfwbn1#
我不知道你是怎么做到的。在linux上,在python 3.4.3中(我以为我在python 2.7的某个版本中做到了),我需要把tpl变成字符串
以避免发生TypeError
执行此操作时,{{foo}}未更改。
我尝试了上面的代码,看起来代码实际上并不适用于python 2.7.6。我将看看是否能找到一种方法使其适用于2.7.6,因为这似乎是最近linux发行版的常见版本。
更新:
http://bugs.python.org/issue1686据我所知,它在2010年应用于python 3.2,在2014年应用于python 2.7。为了使它工作,你可以应用问题1686的补丁,或者你可以用这个补丁https://hg.python.org/cpython/file/8a98ee6baa1e/Lib/string.py的实际源代码覆盖你类中的safe_substitute()。
此代码适用于2.7.6和3.4.3
结果:
o2rvlv0m2#
问题
解决方案(解决方法)
陷阱
{{var}}
)。示例
结果