'Return a :class:`.Namespace` corresponding to the given ``uri``.
If the given ``uri`` is a relative URI (i.e. it does not
contain a leading slash ``/``), the ``uri`` is adjusted to
be relative to the ``uri`` of the namespace itself. This
method is therefore mostly useful off of the built-in
``local`` namespace, described in :ref:`namespace_local`.
In
most cases, a template wouldn\'t need this function, and
should instead use the ``<%namespace>`` tag to load
namespaces. However, since all ``<%namespace>`` tags are
evaluated before the body of a template ever runs,
this method can be used to locate namespaces using
expressions that were generated within the body code of
the template, or to conditionally use a particular
namespace.'

def get_namespace(self, uri):

    key = (self, uri)
    if (key in self.context.namespaces):
        return self.context.namespaces[key]
    else:
        ns = TemplateNamespace(uri, self.context._copy(), templateuri=uri, calling_uri=self._templateuri)
        self.context.namespaces[key] = ns
        return ns
