■ はじめに
Jinja2で 既存のリストから特定の文字列を除外したかったが、
https://dk521123.hatenablog.com/entry/2024/10/19/000848
で記載したように、リスト内包表記がサポート外とのことだったので、 大分ハマっていたら、フィルタのrejectでやりたいことが実現できた。 そこで今回は、Jinja2 の フィルタ について、メモっておく。
目次
【1】フィルタ 1)公式ドキュメント 2)サポートされているメソッド (Built-in Filters) 【2】lower / upper 【3】select/selectattr/reject/rejectattr 1)select/reject 2)selectattr/rejectattr 【4】join
【1】フィルタ
* 対象変数後に「|(パイプ)」を書き、その後に対象フィルタ名を記述すると Linuxの|(パイプ)みたいに、そのフィルタを適用した後が返る
1)公式ドキュメント
* 以下を参照
https://jinja.palletsprojects.com/en/3.1.x/templates/#filters
2)サポートされているメソッド (Built-in Filters)
* 以下を参照 => そんなに量が多くなく、直感的に分かりやすいので ざっと眺めてみるといいかも、、、
https://jinja.palletsprojects.com/en/3.1.x/templates/#builtin-filters
【2】lower / upper
* 小文字・大文字に変換にする
lower
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.lower
{# 小文字 #}
{{ value | lower }}
upper
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.upper
{# 大文字 #}
{{ value | upper }}
【3】select/selectattr/reject/rejectattr
* select/reject がリスト(配列)のためのメソッド * selectattr/rejectattr が辞書操作のためのメソッド => 以下のサイトがめちゃくちゃ参考になる
https://zaki-hmkc.hatenablog.com/entry/2021/02/18/000228
1)select/reject
* リスト(配列)のためのメソッドで select の逆が、reject(除外)と覚えると分かりやすい
select
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.select
reject
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.reject
サンプル
{# リスト「columns」内に「updated_at」「inserted_at」を除外してループを回す。 始め、continueとか使ってもいいかなっと思ったが、 それだと、「updated_at」「inserted_at」が最後にあった場合に 「loop.last」で制御できなくてうまく動かなかったので、、、 #} CREATE TABLE demo_table {% for column in columns | reject('in', ['updated_at', 'inserted_at']) %} {# ! 注目 ! #} {{ column }} TEXT{% "," if not loop.last else "" %} {% endfor %}
2)selectattr/rejectattr
* 同様に、辞書操作のためのメソッドで、selectattr <=> rejectattr(除外)
selectattr
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.selectattr
rejectattr
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.rejectattr
【4】join
* Python の join と同じで、配列の結合
https://jinja.palletsprojects.com/en/3.0.x/templates/#jinja-filters.selectattr
サンプル
{% set values = ["Hello", "World"] %} {{ values | join(', ') }} # Hello, World
参考文献
https://tekunabe.hatenablog.jp/entry/2020/09/26/ansible_like_
https://qiita.com/yunano/items/eb2c5c945bc640d1410a
関連記事
Jinja2 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/10/19/000848
Jinja2 ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/10/18/001757
Jinja2 ~ Macro ~
https://dk521123.hatenablog.com/entry/2023/11/28/235951
Jinja2 ~ Whitespace Control ~
https://dk521123.hatenablog.com/entry/2024/10/29/151203
dbt ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2024/09/11/003301
Flask ~ jinja2 ~
https://dk521123.hatenablog.com/entry/2018/09/22/142348
標準テンプレートエンジン
https://dk521123.hatenablog.com/entry/2020/01/07/212138