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__().
