【发布时间】:2016-05-03 18:12:45
【问题描述】:
我正在为用户消息格式化很多字符串。可能看起来像这样:
def sms(**kwargs):
return "Sorry {name}, but your payment was rejects. Please visit {url} and try again.".format(
name=kwargs.get('name'),
url=shorten_url(kwargs.get('url'))
)
如果我不需要重新格式化任何关键字 args,我可以这样做,这很不错:
def sms(**kwargs):
return "Sorry {name}, but your payment was rejects. Please visit {url} and try again.".format(**kwargs)
所以我希望也许可以做这样的事情:
def sms(**kwargs):
return "Sorry {name}, but your payment was rejects. Please visit {url|shorten_url} and try again.".format(**kwargs)
所以我可以使用管道格式化字符串内联。这似乎没什么大不了的,但我正在写很多这样的消息。
我注意到 python string.vformat 函数,但我不确定这是否是我正在寻找的。有什么想法吗?
【问题讨论】:
-
也许你可以使用像jinja2这样的真正的模板引擎?
-
是的,我见过的很多 Python 模板系统都有这样的特性。 jinja2 的形式为custom filters
-
是的,我实际上正在远离 jinja 以支持功能组合和字符串连接。 here's a snippet 我正在编写的一些实际代码——我更喜欢这种方式。
-
* 另见:stackoverflow.com/q/35574349/42223 了解另一个子类化 string.Formatter 的示例
标签: python