我试图用Mustache绕过复杂的物体。我实际上是使用pystache在Python中,但文档说它与JS版的Mustache兼容。
在小胡子中,如果information
是一个简单的字符串,那么一切都很好:{{information}}
例如,Mustache将information
的值设为XYZPDQ
。
如果information
是一个复杂的对象,它不起作用:{{information.property1}} - {{information.property2}}
什么都不显示。
我希望看到类似这样的内容:I am property 1 - XYZPDQ
还有部分内容。但这似乎是一种疯狂的过度杀伤力。在那种情况下,我想会有这样的设置:
的layout.html
<div>
{{> information}}
</div>
information.mustache
{{property1}} - {{property2}}
现在,我将为每个属性提供大量的.mustache部分内容。那不是对的。
更新:以下是使用对象的@ trvrm答案的变体,它显示了问题。它适用于字典,但不适用于复杂类型。我们如何用复杂的类型做到这一点?
import pystache
template = u'''
{{greeting}}
Property 1 is {{information.property1}}
Property 2 is {{information.property2}}
'''
class Struct:
pass
root = Struct()
child = Struct()
setattr(child, "property1", "Bob")
setattr(child, "property2", 42)
setattr(root, "information", child)
setattr(root, "greeting", "Hello")
context = root
print pystache.render(template, context)
的产率:
Property 1 is
Property 2 is
如果您将最后两行更改为:
context = root.__dict__
print pystache.render(template, context)
然后你明白了:
Hello
Property 1 is
Property 2 is
这个例子,加上下面的trvrm的答案,表明pystache似乎更喜欢字典,并且在复杂类型方面遇到麻烦。
答案 0 :(得分:3)
Pystache在渲染嵌套对象方面没有问题。
import pystache
template = u'''
{{greeting}}
Property 1 is {{information.property1}}
Property 2 is {{information.property2}}
'''
context={
'greeting':'Hello',
'information':{
'property1':'bob',
'property2':42
}
}
print pystache.render(template,context)
的产率:
Hello
Property 1 is bob
Property 2 is 42
<强>更新强>
如果我们替换
,可以使上面的例子有效class Struct():
pass
与
class Struct(object):
pass