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
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.
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.
Every python object will implement TemplateScalarModel whose getAsString() method simply delegates to toString().
Every python object will implement TemplateBooleanModel whose getAsBoolean() method simply delegates to __nonzero__() in accordance with Python semantics of true/false.
Model wrappers for PyInteger, PyLong, and PyFloat objects implement TemplateNumberModel whose getAsNumber() method returns __tojava__(java.lang.Number.class).
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__().