用Mako在字符串中进行命名替换
在使用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!'
这样看起来更好,而且也能适应未来的变化。