ちょっと面倒くさい。こまかいところが残念。
成果物
情報源
コード抜粋
マクロ定義
templates/macro/header.html
{% macro menu(items) %} <header><nav><ul> {% for item in items %} <li><a href="/{{item}}">{{item}}</a></li> {% endfor %} </ul></nav></header> {% endmacro menu %}
templates/macro/footer.html
{% macro footer() %} <footer>© 2021 {{ config.extra.author }}</footer> {% endmacro footer %}
マクロのインポート
templates/index.html templates/page.html
{% import "macro/header.html" as header %} {% import "macro/footer.html" as footer %} ...
マクロの呼出
templates/index.html templates/page.html
... {{ header::menu(items=["archive","author","about","blog"]) }} ... {{ footer::footer() }} ...
フォーマット
マクロの定義
{% macro マクロ名(引数名=デフォルト値, 引数名=デフォルト値) %} {# 実装内容 #} {% endmacro マクロ名 %}
- 引数はなくてもいい
- デフォルト値はリテラル値のみ
マクロのインポート
{% import "templates/からの相対パス" as 任意名 %}
- ファイルの先頭に書かねばならない
as
句は必須。省略できないas
の名前は1ファイルごとに別名が必要
マクロの呼出
{{ 任意名::マクロ名(引数名=値) }}
ダメな点
macro
- 可変引数
*args
,**kwargs
で書けない
- 可変引数
import
- ファイルの先頭で呼ばねばならない
as
句が必須であるas
句の名前はファイルごとに異なるものにせねばならない
as
句を省略できない
{% import "macro/footer.html" as macro %}
なんでや! ワイは以下のように書きたかったんや!
{% import "macro/footer.html" %} {{ footer() }}
おなじ名前のas
名にできない
{% import "macro/header.html" as macro %} {% import "macro/footer.html" as macro %}
{{ macro::menu(items=["archive","author","about","blog"]) }} {{ macro::footer() }}
headerもfooterもmacro
にまとめたかった。なのに、これができなかった。なんでや! いちいちファイル単位で別名をつけねばならないって苦痛すぎぃ!
1行で使えない
必ずインポートと呼出の2行いる。
{% import "macro/header.html" as header %} {{ header::menu(items=["archive","author","about","blog"]) }}
ウザい。長い。くさい。キモイ。
ワイはもっと短く書きたかったんや!
{{ macro.header.menu(site.section_names) }}
インポートはファイルの先頭のみ
インポートは必ずファイルの先頭で行わねばエラーになる。
{% import "macro/header.html" as header %} ...
C言語かよ。ダッサ。おっくれってる〜♪
所感
マクロは地雷。いちいち罠が多すぎる。
でも、このマクロを使いこなすのがテンプレートエンジンの真髄だとも思うわけで。つまりはこのクソ体系を強いられているんだ!
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
$ uname -a Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux