Jinjaメモ
基本
{% ステートメント %}: ステートメントを実行する
{%set a=0%}のように%の後の空白は省略可能(ただし-は除く)
{{ 式 }} : 式の値が入る
{# コメント #}: コメント
{%- / -%}: 前/次のブロックまでの空白を除去する
<p>{% if... %} {{ b }} {% endif %}</p>: <p> <bの値> </p>
<p>{% if... -%} {{ b }} {%- endif %}</p><p><bの値></p>
変数、マクロの命名規則はpython式 snake_case
ステートメント
set : 代入
{% set a=1 %}
if 式 / else /endif: 分岐
{% if a==1 %}{{ a }}{% endif %}
if式
{{ 式 if 条件 (else 式2) }}: 条件が成立する場合に式が入る。(そうでないなら式2が入る)
{{ str | length if str }}: strが空でない場合strの長さが入る
配列と辞書
code:jinja
{{ fruits0 }} # 出力: apple code:jinja
{% set person = {'name': 'John', 'age': 30} %}
# name:Johnのような表記はできない(無視)。必ずダブルかシングルクオーテーションで囲むこと
{{ person.name }} # 出力: John ※person"name"でもOK {{ person.age }} # 出力: 30
配列の合成
+記号で合成できる。※appendなどの変数値を破壊する系の関数は存在しない。
{{ (['apple', 'banana', 'cherry'] + ["orange"]) | length }} # 4
フィルタ
| フィルタ名を式のうしろにつけると特殊効果が発動する。
length: 配列の長さ
code:jinja
random: 配列からひとつランダムに選ぶ
code:jinja
join: 配列を指定文字(指定しなければ空文字)で接続
code:jinja
replace: 文字を置換する
code:jinja
{{ "luck"|replace("l","f") }}
list: (主にジェネレータを)配列に変換する
select: テスト条件に一致する要素のみ採用する※テストは後述
code:jinja
※selectはジェネレータを返すので、配列に変換したければlistを挟む
set arr = [ item if item ]のように配列の中で定義を分岐すると、undefinedが配列に残ってしまうため、それを取り除く用途で便利
注意:フィルタは直前の要素のみに有効なので、場合によってカッコをつかって範囲を調整する必要が出てくる
code:jinja
テスト
値がざっくりどの仲間に分類されるかで分岐できる。型チェックのようなものだが、もっと柔軟性がある
code:jinja
{% if variable is defined %} # この defined がテスト
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}
defined/undefined: 値は定義されている/定義されていない
boolean: 値はブール値である。
number: 値は「数」である。
integer: 値は整数である。
even/odd: 値は偶数/奇数である。
string: 値は文字列である。
upper/lower: 値は大文字/小文字である。
float: 値は小数である。
none: 値はNoneである。
出力結果を変数に代入(set ブロック)
code:jinja
{% set arg %}
{% endset %}
{{ arg }}
マクロ
code:jinja
{% macro cis(list) -%}
{{ list | random }}
{%- endmacro%}
pythonコマンド
配列に分解するsplit("*")は便利
defなど関数定義はできない