{% macro %} 标签允许您在模板中定义自定义函数,类似于常规编程语言。
{% macro input() %}
...
{% endmacro %}另外,您可以在结束标签后包含宏的名称,以提高可读性:
{% macro input() %}
...
{% endmacro input %}以下示例定义了一个名为 input() 的函数,它接受 4 个参数,相关值作为变量在内部的标记中访问。
{% macro input(name, value, type, size) %}
<input
type="{{ type|default('text') }}"
name="{{ name }}"
value="{{ value|e }}"
size="{{ size|default(20) }}" />
{% endmacro %}注意:宏参数不指定默认值,并且始终被视为可选的。
在使用宏之前,需要首先使用 {% import %} 标签进行“导入”。如果宏定义在同一模板中,可以使用特殊的 _self 变量。
{% import _self as form %}这里,宏函数被分配给 form 变量,可以像调用其他任何函数一样调用。
<p>{{ form.input('username') }}</p>
<p>{{ form.input('password', null, 'password') }}</p>宏可以在主题局部文件中定义并按名称导入。要从名为 macros/form.htm 的局部文件导入宏,只需在 import 标签后以字符串形式传递名称。
{% import 'macros/form' as form %}或者,您可以从系统视图文件导入宏,并且这些宏将被接受。要从 plugins/acme/blog/views/macros.htm 导入,只需传递路径提示即可。
{% import 'acme.blog::macros' as form %}当您想在同一模板中的另一个宏内部使用宏时,需要将其本地导入。
{% macro input(name, value, type, size) %}
<input
type="{{ type|default('text') }}"
name="{{ name }}"
value="{{ value|e }}"
size="{{ size|default(20) }}" />
{% endmacro %}
{% macro wrapped_input(name, value, type, size) %}
{% import _self as form %}
<div class="field">
{{ form.input(name, value, type, size) }}
</div>
{% endmacro %}宏无法访问当前页面变量。
<!-- October CMS -->
{{ site_name }}
{% macro myFunction() %}
<!-- NULL -->
{{ site_name }}
{% endmacro %}您可以使用特殊的 _context 变量将变量传递给函数。
{% macro myFunction(vars) %}
{{ vars.site_name }}
{% endmacro %}
{% import _self as form %}
<!-- October CMS -->
{{ form.myFunction(_context) }}