Namespaces
=============

Namespaces are used to organize groups of components into categories, and also to "import" components from other files.

If the file `components.html` defines these two components:

    ## components.html
    <%def name="comp1()">
        this is comp1
    </%def>
    
    <%def name="comp2()">
        this is comp2
    </%def>
    
You can make another file, for example `index.html`, that pulls those two components into a namespace called `comp`:

    ## index.html
    <%namespace name="comp" file="components.html"/>
    
    Heres comp1:  ${comp.comp1()}
    Heres comp2:  ${comp.comp2()}

The `comp` variable above is an instance of `mako.runtime.Namespace`, a **proxy object** which delivers method calls to the underlying template callable using the current context.

`<%namespace>` also provides an `import` attribute which can be used to pull the names into the local namespace, removing the need to call it via the ".".  When `import` is used, the `name` attribute is optional.

    <%namespace file="components.html" import="comp1, comp2"/>
    
    Heres comp1:  ${comp1()}
    Heres comp2:  ${comp2()}
    
`import` also supports the "*" operator:

    <%namespace file="components.html" import="*"/>

    Heres comp1:  ${comp1()}
    Heres comp2:  ${comp2()}

The names imported by the `import` attribute take precedence over any names that exist within the current context.

### Namespaces from Regular Python Modules {@name=frommodules}

Namespaces can also import regular Python functions from modules.  These callables need to take at least one argument, `context`:

A module file `some/module.py` might contain the callable:

    def my_tag(context):
        context.write("hello world")

A template can use this module via:
    
    <%namespace name="hw" module="some.module"/>

    ${hw.my_tag()}
    
Note that the `context` argument is not needed in the call; the `namespace` tag creates a locally-scoped callable which takes care of it.

### Declaring defs in namespaces.

The `<%namespace>` tag supports the definition of `<%defs>` directly inside the tag.  These defs become part of the namespace like any other function, and will override the definitions pulled in from a remote template or module:
    
    ## define a namespace
    <%namespace name="stuff">
        <%def name="comp1()">
            comp1
        </%def>
    </%namespace>
    
    ## then call it
    ${stuff.comp1()}

### The "body()" method {@name=body}

Every namespace that is generated from a template contains a method called `body()`.  This method corresponds to the main body of the template, and plays its most important roles when using inheritance relationships as well as def-calls-with-content.

Since the `body()` method is available from a namespace just like all the other defs defined in a template, what happens if you send arguments to it ?  By default, the `body()` method accepts no positional arguments, and for usefulness in inheritance scenarios will by default dump all keyword arguments into a dictionary called `pageargs`.  But if you actually want to get at the keyword arguments, Mako recommends you define your own argument signature explicitly.  You do this via using the `<%page>` tag:

    <%page args="x, y, someval=8, scope='foo', **kwargs"/>
    
A template which defines the above signature requires that the variables `x` and `y` are defined, defines default values for `someval` and `scope`, and sets up `**kwargs` to receive all other keyword arguments.  If `**kwargs` or similar is not present, the argument `**pageargs` gets tacked on by Mako.  When the template is called as a top-level template (i.e. via `template.render()`) or via the `<%include>` tag, the values for these arguments will be pulled from the `Context`.  In all other cases, i.e. via calling the `body()` method, the arguments are taken as ordinary arguments from the method call.  So above, the body might be called as:

    ${self.body(5, y=10, someval=15, delta=7)}
    
The `Context` object also supplies a `kwargs` accessor, for cases when youd like to pass along whatever is in the context to a `body()` callable:

    ${next.body(**context.kwargs)}

The usefulness of calls like the above become more apparent when one works with inheriting templates.  For more information on this, as well as the meanings of the names `self` and `next`, see [inheritance](rel:inheritance).

### Namespace methods and properties {@name=properties}

The `Namespace` class includes helpful accessors and methods:

* `attr` - allows access module level attributes by name.  This accessor allows templates to supply "scalar" attributes which are particularly handy in inheritance relationships.  See the example in [inheritance](rel:inheritance).
* `module` - the Python module referenced by this Namespace.  If the namespace references a `Template`, then this module is the equivalent of `template.module`, i.e. the generated module for the template.
* `filename` - the path of the filesystem file used for this Namespace's module or template.  If this is a pure module-based Namespace, this evaluates to `module.__file__`.  If a template-based namespace, it evaluates to the original template file location.
* `template` - the `Template` object referenced by this Namespace, if any.
* `uri` - the uri for this Namespace's template (i.e. whatever was sent to `lookup.get_template()`).  This is the equivalent of `template.uri`.
* `context` - the `Context` object for this namespace.  Namespaces are often created with copies of contexts that contain slightly different data, particularly in inheritance scenarios.  Using the `Context` off of a `Namespace` one can traverse an entire chain of templates that inherit from one-another.
* `get_namespace(uri)` - this method returns a `Namespace` at the given `uri`.  If the given uri is a relative uri (i.e. it does not contain ia 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 the next section.  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 evaulated before the body of the 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.

### Built-in Namespaces {@name=builtin}

The namespace is so great that Mako gives your template one (or two) for free.  The names of these namespaces are `local` and `self`.  Other built-in namespaces include `parent` and `next`, which are optional and are described in [inheritance](rel:inheritance).

#### local

The `local` namespace is basically the namespace for the currently executing template.  This means that all of the top level defs defined in your template, as well as your template's `body()` function, are also available off of the `local` namespace.

The `local` namespace is also where properties like `uri`, `filename`, and `module` and the `get_namespace` method can be particularly useful.

#### self

The `self` namespace, in the case of a template that does not use inheritance, is synonomous with `local`.  If inheritance is used, then `self` references the topmost template in the inheritance chain, where it is most useful for providing the ultimate form of various "method" calls which may have been overridden at various points in an inheritance chain.  See [inheritance](rel:inheritance).

### Inheritable Namespaces

The `<%namespace>` tag includes an optional attribute `inheritable="True"`, which will cause the namespace to be attached to the `self` namespace.  Since `self` is globally available throughout an inheritance chain (described in the next section), all the templates in an inheritance chain can get at the namespace imported in a super-template via `self`.
    
    ## base.html
    <%namespace name="foo" file="foo.html" inheritable="True"/>
    
    ${next.body()}

    ## somefile.html
    <%inherit file="base.html"/>
    
    ${self.foo.bar()}

This allows a super-template to load a whole bunch of namespaces that its inheriting templates can get to, without them having to explicitly load those namespaces themselves.

The `import="*"` part of the `<%namespace>` tag doesn't yet interact with the `inheritable` flag, so currently you have to use the explicit namespace name off of `self`, followed by the desired function name.  But more on this in a future release.
