import
The import
tag allows you to use macros defined in another template.
Assuming that a macro named input
exists in a template called form_util
you can import it like so:
{% import "form_util" %}
{{ input("text", "name", "Mitchell") }}
The easiest and most flexible is importing the whole module into a variable. That way you can access the attributes:
{% import 'forms.html' as forms %}
<dl>
<dt>Username</dt>
<dd>{{ forms.input('username') }}</dd>
<dt>Password</dt>
<dd>{{ forms.input('password', null, 'password') }}</dd>
</dl>
<p>{{ forms.textarea('comment') }}</p>
Alternatively you can import names from the template into the current namespace:
{% from 'forms.html' import input as input_field, textarea %}
<dl>
<dt>Username</dt>
<dd>{{ input_field('username') }}</dd>
<dt>Password</dt>
<dd>{{ input_field('password', '', 'password') }}</dd>
</dl>
<p>{{ textarea('comment') }}</p>
Dynamic Import
The import
tag will accept an expression to determine the template to import at runtime. For example:
{% import modern ? 'ajax_form_util' : 'simple_form_util' %}
{{ input("text", "name", "Mitchell") }}