模板代码片段宏函数

iris.Django模板引擎可以很简便的定义一些宏函数代码片段。宏代码片段相当于一个函数,它只能调用从参数传入的变量。类似于使用 include。不过 macro 有限定的作用域。如文章我们给文章列表的文章 item 使用macro

定义一个宏函数
{% macro archive_detail(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}
使用定义的宏函数
{% for item in archives %}
    {{ archive_detail(item) }}
{% endfor %}

同时宏函数还可以保存到独立的文件中,然后通过 import 来嵌套进来。当一个文件中包含多个宏函数,可以使用,将隔开连续引入多个宏函数。还可以使用 as 来设置别名:

保存宏函数到 archive.helper

{% macro archive_detail(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}
{% macro archive_detail2(archive) %}
<li class="item">
    <a href="/archive/{{archive.Id}}" class="link">
        <h5 class="title">{{archive.Title}}</h5>
    </a>
</li>
{% endmacro %}

在 index.html 中引入:

用import引入:
{% import "archive.helper" archive_detail, archive_detail2 as archive_detail_new, archive_detail as new_item %}
调用:
{% for item in archives %}
    {{ archive_detail(item) }}
    {{ archive_detail_new(item) }}
    {{ new_item(item) }}
{% endfor %}