根据StringTemplate 4 wiki,我应该能够显示一个expr属性,但我不能。我正在使用StringTemplate4和jython。
这是我的模板文件test.st:
test(persons, person) ::= <<
<table>
<tr><th>Name</th><th>Age</th></tr>
<tr><td>$person.name$</td><td>$person.age$</td></tr>
$persons:{p|<tr><td>$p.name$</td><td>$p.age$</td></tr>}$
</table>
这是我的jython代码。当我尝试渲染模板时,不显示名称和年龄值。
>>> import org.stringtemplate.v4 as st
>>>
>>> class Person:
... def __init__(self, name, age):
... self.name = name
... self.age = age
...
>>> group = st.STGroupDir('~/template', '$', '$')
>>> tmpl = group.getInstanceOf('test')
>>>
>>> tmpl.add('persons', [Person('jim', 25), Person('sam', 46)])
/test()
>>> tmpl.add('person', Person('bob', 55))
/test()
>>>
>>> print tmpl.render()
<table>
<tr><th>Name</th><th>Age</th></tr>
<tr><td></td><td></td></tr>
<tr><td></td><td></td></tr><tr><td></td><td></td></tr>
</table>
在解释器中,我可以访问tmpl中的属性。
>>> tmpl.attributes
{person=<__main__.Person instance at 0x54>, persons=[<__main__.Person instance at 0x55>, <__main__.Person instance at 0x56>]}
>>> p = tmpl.getAttribute('person')
>>> print p.name, p.age
bob 55
>>> for p in tmpl.getAttribute('persons'):
... print p.name, p.age
...
jim 25
sam 46
知道为什么这不起作用?难道我做错了什么?我也试过为Person类创建getName()和getAge()方法而没有运气。如果我创建数据聚合,我可以很好地访问属性。
答案 0 :(得分:0)
在Java中,这是因为这些属性不公开。 Jython如何处理对字段的访问?