The freemarker.ext.jython
package consists of
models that enable any Jython object to be used as a
TemplateModel
. In the very basic case, you only
need to call the
public TemplateModel wrap(Object obj);
method of the
freemarker.ext.jython.JythonWrapper
class. This
method will wrap the passed object into an appropriate
TemplateModel
. Below is a summary of the properties
of returned model wrappers. Let's assume that the model that resulted
from the JythonWrapper
call on object
obj
is named model
in the
template model root for the sake of the following discussion.
TemplateHashModel functionality
PyDictionary
and
PyStringMap
will be wrapped into a hash model.
Key lookups are mapped to the __finditem__
method; if an item is not found, a model for None
is returned.
TemplateScalarModel functionality
Every python object will implement
TemplateScalarModel
whose
getAsString()
method simply delegates to
toString()
.
TemplateBooleanModel functionality
Every python object will implement
TemplateBooleanModel
whose
getAsBoolean()
method simply delegates to
__nonzero__()
in accordance with Python semantics
of true/false.
TemplateNumberModel functionality
Model wrappers for PyInteger
,
PyLong
, and PyFloat
objects
implement TemplateNumberModel
whose
getAsNumber()
method returns
__tojava__(java.lang.Number.class)
.
TemplateSequenceModel functionality
Model wrappers for all classes that extend
PySequence
will implement
TemplateSequenceModel
and thus their elements
will be accessible by index using the model[i]
syntax, which will delegate to __finditem__(i)
.
You can also query the length of the array or the size of the list
using the model?size
built-in, which will
delegate to __len__()
.