【Python】Jinja2 ~ フィルタ ~

■ はじめに

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