jinja2-cliというものがあり、こちらはj2-cliとは異なりpython3.xでも動くらしい。それならもうkamidanaとか作らなくて良いかなと思ったりもしたけれど。既にこちらの方が機能が豊富な感じなのでそのまま個人用途では使い続けることにした。
-extension という引数を渡せるようにした
何やらそのjinja2-cliはextensionを引数に取れるらしく、そう言えばそれは対応していなかったということで対応することにした。
$ kamidana -e with_ -e do -e loopcontrols hello.jinja2
doだったりloopcontrolsのextensionsが使えるようになる。
hello.jinja2
{# with with. with_ extension is used. #}
{% with msg = "hello"%}
{{msg}}
{% with msg = "world"%}
{{msg}}
{% endwith %}
{{msg}}
{% endwith %}
## counting
{# with break and continue. loopcontrolls extension is used. #}
{% for i in range(10) %}
{% if i % 3 == 0 %}{% continue %} {% endif %}
{% if i == 5 %}{% break %} {% endif %}
- {{i}}
{% endfor %}
## do
{% set xs = [] %}
{% for i in range(10) %}
{% do xs.append(i) %}
{% endfor %}
{{xs}}
実行結果は以下の様な感じ。
kamidana -e with_ -e do -e loopcontrols hello.jinja2 hello world hello ## counting - 1 - 2 - 4 ## do [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
追記
ついでに --addtionals のオプションも複数取れるようにした。このadditionalsという名前はあんまり良いとは思っていなくて適切な名前があるならそれに変えたい。
$ kamidana --additionals=a.py --additionals=b.py msg.j2 H E L L O W O R L D
a.py
from kamidana import as_filter @as_filter def upper(x): return x.upper()
b.py
from kamidana import as_filter @as_filter def emphasis(x): return " ".join(list(x))
msg.j2
{% for word in ["hello", "world"] %}
{{word|upper|emphasis}}
{% endfor %}