Jinja2テンプレートにおいて、importでマクロをロードする

今日は、『つくってマスターPython』の6-3 “Jinja2テンプレートの活用”で学んだことをアウトプットします。

マクロは、同じファイル内でなく、別ファイルに用意することもできます。この場合、importを使って以下のように読み込みます。これで指定したファイルが読み込まれ、変数に設定されます。マクロは、その変数内にある要素として「変数.マクロ(・・・・・)」という形で呼び出すことができます。
{% import ファイルパス as 変数 %}

「templates」フォルダ内に「macro.html」というファイルを用意し、以下を記述します。

{% macro row(item) -%}
<tr>
 <td>{{item.id}}</td>
 <td>{{item.name}}</td>
 <td>{{item.mail}}</td>
</tr>
{%- endmacro %}
ここでは、rowマクロを定義してあります。<table>の<tr>部分を出力するもので、引数にitemオブジェクトを渡すと、その中からid, name, mailといった項目をまとめて表示します。
作成したマクロファイルを利用するためにindex.htmlを編集します。

マクロの定義の書き方については、以前に学びました。

{% extends "layout.html" %}

{% block content %}
<table>
 <tr>
   <th>ID</th>
   <th>NAME</th>
   <th>MAIL</th>
 </tr>
 {% import 'macro.html' as m %}
 {% for item in data %}
   {{m.row(item)}}
 {% endfor %}
</table>
{% endblock %}
ここでは、テーブルの内容を出力する手前で、{% import ‘macro.html’ as m %}としてmacro.htmlを読み込んでいます。そしてテーブルの出力部分では、{{m.row(item)}}という形でrowマクロを実行しています。

サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪