用Mako在字符串中进行命名替换

0 投票
2 回答
548 浏览
提问于 2025-04-16 05:05

在使用Mako创建模板时,我需要写一些像这样的代码:${_('Hello, %(fname)s %(lname)s') % {'fname':'John','lname':'Doe'}}

但是每次写的时候,我都会遇到一个错误:SyntaxException: (SyntaxError) unexpected EOF while parsing。有没有什么办法可以做到同样的事情呢?

我发现${_('Hello, %s %s') % ('John', 'Doe')}是可以工作的,但这样的话,如果需要换语言,就不能随意调整替换的顺序。

谢谢。

2 个回答

2

在Mako模板中,使用{}放在${}里面会比较复杂;因为Mako在遇到第一个}时就会停止解析这个表达式。一个可能的解决办法是用dict()来代替{}

${_('Hello, %(fname)s %(lname)s') % dict(fname='John', lname='Doe')}
0

试试新的Python字符串格式化方法:

>>> "{foo} {bar}".format(foo="foo", bar="bar")
'foo bar'
>>> "{foo} {bar}".format(**{"foo": "Hello", "bar": "World!"})
'Hello World!'

这样看起来更好,而且也能适应未来的变化。

撰写回答