具有默认值的python模板

前端之家收集整理的这篇文章主要介绍了具有默认值的python模板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

python中我可以使用模板

from string import Template
templ = Template('hello ${name}')
print templ.substitute(name='world')

如何在模板中定义默认值?
并且没有任何价值地调用模板.

print templ.substitute()

编辑

当我没有参数调用获取默认值,例如

 print templ.substitute()
 >> hello name
最佳答案
Template.substitute方法采用mapping argument in addition to keyword arguments.关键字参数覆盖映射位置参数提供的参数,这使得映射成为实现默认值的自然方式,而无需子类化:

from string import Template
defaults = { "name": "default" }
templ = Template('hello ${name}')
print templ.substitute(defaults)               # prints hello default
print templ.substitute(defaults,name="world") # prints hello world

这也适用于safe_substitute:

print templ.safe_substitute()                       # prints hello ${name}
print templ.safe_substitute(defaults)               # prints hello default
print templ.safe_substitute(defaults,name="world") # prints hello world

如果你绝对坚持不传递任何参数替换你可以继承模板:

class DefaultTemplate(Template):
    def __init__(self,template,default):
        self.default = default
        super(DefaultTemplate,self).__init__(template)

    def mapping(self,mapping):
        default_mapping = self.default.copy()
        default_mapping.update(mapping)
        return default_mapping

    def substitute(self,mapping=None,**kws):
        return super(DefaultTemplate,self).substitute(self.mapping(mapping or {}),**kws)

    def substitute(self,self).safe_substitute(self.mapping(mapping or {}),**kws)

然后像这样使用它:

DefaultTemplate({ "name": "default" }).substitute()

虽然我发现这不仅仅是将默认值的映射传递给替换,因此不那么明确且不易读.

猜你在找的Python相关文章