freemarker.ext.jython
包包含了启用任意Jython对象的模型,
并被用作是TemplateModel。在一个基础的示例中,
你可以使用如下调用:
public TemplateModel wrap(Object obj);
freemarker.ext.jython.JythonWrapper 类的方法。
这个方法会包装传递的对象,包装成合适的 TemplateModel。
下面是一个对返回对象包装器的属性的总结。为了下面的讨论,
我们假设在模板模型根中,对对象 obj 调用
JythonWrapper 后模型名为 model。
模板哈希表模型功能(TemplateHashModel functionality)
PyDictionary 和
PyStringMap 将会被包装成一个哈希表模型。
键的查找映射到 __finditem__
方法;如果一个项没有被找到,
那么就返回一个为 None 的模型。
模板标量模型功能(TemplateScalarModel functionality)
每一个python对象会实现
TemplateScalarModel 接口,
其中的 getAsString()
方法会委派给 toString() 方法。
模板布尔值模型功能(TemplateBooleanModel functionality)
每一个python对象会实现
TemplateBooleanModel 接口,
其中的 getAsBoolean() 方法会指派给
__nonzero__() 方法,
符合Python语义的true/false。
模板数字模型功能(TemplateNumberModel functionality)
对PyInteger,PyLong 和
PyFloat 对象的模型包装器实现了
TemplateNumberModel 接口,其中的
getAsNumber() 方法返回
__tojava__(java.lang.Number.class)。
模板序列模型功能(TemplateSequenceModel functionality)
对所有扩展了 PySequence 的类的模型包装器会实现
TemplateSequenceModel 接口,
因此它们中的元素可以通过使用 model[i] 语法形式的序列来访问,
这会指派给__finditem__(i)。你也可以使用内建函数
model?size 查询数组的长度或者list的大小,
它会指派给 __len__()。