利用するjinja2のextensionを引数で渡せるようにした

github.com

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 %}