我有以下json模板
template.py
from string import Template
test1 = Template(u'''\
{
"data": {
"name": "$name"
}
}
''')
并生成我使用的JSON JSONGen.py
import template
class JSONGen:
result1 = template.test1.safe_substitute(
name = 'SomeName'
)
print(result1)
现在可以正常工作,它会生成JSON,但我正在尝试创建一个接受模板名称并调用类似名称的函数
JSONGenV2.py
import template
class JSONGenV2:
def template_func(self, templateName):
generatedTemplate = template.templateName.safe_substitute(
name = 'SomeName'
)
print (generatedTemplate)
template_func(test1)
现在我要实现的是使用'templateName'内容作为要调用的模板,因为它现在是
template.templateName.safe_substitute
给我一个错误,说“ templateName”不存在,如何将“ templateName”更改为在案例“ test1”中传递的值,所以它将调用
template.test1.safe_substitute
谢谢
答案 0 :(得分:1)
使用getattr()
,用法如下:
getattr
(对象,名称[,默认])返回 object 的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,
getattr(x, 'foobar')
等效于x.foobar
。如果指定的属性不存在,则返回 default (如果提供),否则引发AttributeError
。
应用于您的代码:
class JSONGenV2:
def template_func(self, templateName):
generatedTemplate = getattr(template, templateName).safe_substitute(
name = 'SomeName'
)
print (generatedTemplate)
template_func(test1)
答案 1 :(得分:0)
您需要一种将模板名称转换为实际模板实例的方法。
我将定义一个字典,其键为模板名称,值为模板实例。
test1 = Template(...)
test2 = Template(...)
templates = {
'test1': test1
'test2': test2
}
现在,在您的方法中,您可以使用模板字典来获取您请求的模板的实例:
def template_func(self, templateName):
generatedTemplate = templates[templateName].safe_substitute(
name = 'SomeName'
)
print (generatedTemplate)
您将这样调用该方法:template_func('test1')