'Load a template from the loader.  If a loader is configured this
method ask the loader for the template and returns a :class:`Template`.
If the `parent` parameter is not `None`, :meth:`join_path` is called
to get the real template name before loading.
The `globals` parameter can be used to provide template wide globals.
These variables are available in the context at render time.
If the template does not exist a :exc:`TemplateNotFound` exception is
raised.'

@internalcode
def get_template(self, name, parent=None, globals=None):

    if (self.loader is None):
        raise TypeError('no    loader    for    this    environment    specified')
    if (parent is not None):
        name = self.join_path(name, parent)
    if (self.cache is not None):
        template = self.cache.get(name)
        if ((template is not None) and ((not self.auto_reload) or template.is_up_to_date)):
            return template
    template = self.loader.load(self, name, self.make_globals(globals))
    if (self.cache is not None):
        self.cache[name] = template
    return template
