ビジネスパーソン・ガジェット置場 empty lot for business

営業や仕事、それに伴う生活を便利に楽にするツール、ガジェットを作ります。既にあるツールも自分用にカスタマイズ。

python: jinja2のフィルタ機能まとめ

備忘録です。

jinja2のfilter機能をまとめます。

filter

フィルタ機能

jinja2のフィルタはテンプレート上で変数に処理を施した後、表示したい場合に利用します。変数自体は変更しません。

 

変数を各ページに渡す方法

# app.py

@app.route('/')
def index():
    name = 'annon'
    num = 42
    return render_template('index.html', name=name, num=num)

app.py該当ページの関数内で変数を定義し、render_templateに引数として渡す。

 

各ページで変数を表示する方法

# index.html

{% extends "base.html" %}

{% block content%}
  <h1>hello world</h1>
  {{ name }} <br/>
  {{ num }}
{% endblock%}

 該当ページで{{}}内に変数を記載し呼び出すことができ、表示する。

 

渡された変数にフィルタを適用する方法

一種類のフィルタ関数を利用する

upper, float

# index.html

{% extends "base.html" %}

{% block content%}
  <h1>hello world</h1>
# nameを大文字に変更するフィルタ
  {{ name|upper }} <br/>
# numを不動小数点にするフィルタ
  {{ num|float }}
{% endblock%}

{{}}内の変数に ' | ' + filter関数を記述するとフィルタが適用される

 

name = 'annon' →  ’ANNON'

num = 42      → 42.0

 

上記のように変更された値で表示される

 

複数のフィルタ関数を連結して利用する

select()

# app.py

@app.route('/')
def index():
    nums = [3, 4, 6, 7, 8]
    return render_template('index.html', name=name, nums=nums)

#index.html

{% block content%}
  <h1>hello world</h1>
  {{ name|upper }} <br/>
  {{ nums|select('odd')|list }}
{% endblock%}

リストから引数で指定された内容で(上記は「奇数」)フィルタをかけできたインスタンスをlist()でリスト化し表示

 

 

その他フィルタ一覧

abs() : 絶対値を取得

forceescape(): HTML のエスケープを強制する

map(): リストなどで属性を調べる

unique():一意の項目を調べる

attr():オブジェクトの属性を取得

format():引数の値をフォーマット文字列に適用する

max():最大値を取得

selectattr():指定された属性にテストを適用、テスト成功したオブジェクトのみ選択

batch():アイテムをバッチ処理する

groupby():オブジェクトのシーケンスを属性でグループ化

min():最小値を取得

slice():イテレータをスライス、それらの項目を含むリストのリストを返します

urlencode():UTF-8を使用したURLのパスやクエリで使用するためのデータを引用

capitalize():文の初めを大文字に変更

indent():各行が 4 つのスペースでインデントされた文字列のコピーを返す

pprint():変数をきれいに印刷

sort():並べ替え

urlize():テキスト中のURLをクリックできるリンクに変換

center():指定した幅のフィールド内の値をセンタリング

int():数値に変換

random():シーケンスからランダムな項目を返す

string():文字列に変換

wordcount():文字列の中の単語を数える

default():値が未定義の場合、デフォルト値を返しそれ以外は変数の値を返す

reject():オブジェクトにテストを適用、フィルタリングし成功したオブジェクトを拒否

striptags():SGML/XMLタグを削除し、隣接する空白を1つのスペースに置き換え

wordwrap():文字列を指定した幅で折り返す

dictsort():辞書をソートして(key,value)のペアを出力

join():シーケンス内の文字列を連結した文字列を返す

rejectattr():各オブジェクトの指定された属性にテストを適用して一連のオブジェクトをフィルタリングし、テストが成功したオブジェクトを拒否

sum():合計を取得

xmlattr():dictの項目に基づいてSGML / XML属性文字列を作成

escape():文字列内の文字 & 、 < 、 > 、 ' 、および " をHTMLセーフシーケンスに置き換え

last():シーケンスの最後の項目を返す

replace():置き換えられた値のコピーを返す

title():単語は大文字で始まり、残りの文字はすべて小文字で返す

filesizeformat():「人間が読める」ファイルサイズのように値をフォーマット

length():コンテナに入っているアイテムの数を返す

reverse():オブジェクトを反転させたり、逆に反復処理するイテレータを返す

tojson():オブジェクトをJSONの文字列にシリアライズし、HTMLでレンダリングしても大丈夫なようにマーク

first():シーケンスの最初の項目を返す

round():数値を指定された精度に丸める

trim():先頭と末尾の文字を除去

float():値を浮動小数点数に変換

lower():文字列を小文字に変換

safe():自動エスケープが有効な環境では、この変数はエスケープされない

truncate():文字列の切り捨てられたコピーを返す

 

詳細は下記jinjaのドキュメントより

Template Designer Documentation — Jinja Documentation (3.1.x)