template filter - Flask

文字列にフィルターを適用する

フィルターを適用するには、変数名のあとに | (パイプ文字)を挟んでフィルター名を指定します。

<p>{{ "hello, world" | upper }}</p>

上記の例では「 hello, world 」を大文字に変換します。

自作フィルターの作成

以下の場合は、「 {{ 2 | multiplication(3) }} 」の 2 が multiplication 関数の引数 number に渡される値です。

また、変数 i に 3 が渡されます。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>template filter</h1>
  <p>{{ 2 | multiplication(3) }}</p>
</body>
</html>

app.py

from flask import Flask, render_template

app = Flask(__name__)

@app.template_filter("multiplication")
def multiplication(number, i):
    return number * i

@app.route('/', methods=["GET"])
def index():
    return render_template('index.html')

自作フィルターの作成 (Blueprint)

Blueprint でファイルを分けます。

app.py

from flask import Flask, render_template
from .app_module.add_module import bp

app = Flask(__name__)

app.register_blueprint(bp)

@app.route('/', methods=["GET"])
def index():
    return render_template('index.html')

if __name__ == "__main__":
    app.run()

app_module/add_module.py

from flask import Blueprint

bp = Blueprint('add_module', __name__)

@bp.app_template_filter('multi')
def multiplication(number, i):
    return number * i

templates/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <h1>template filter</h1>
  <p>{{ 2 | multi(3) }}</p>
</body>
</html>

用意されているフィルター

length リストの要素数を得る
join リストを区切り文字をつけて結合する
reverse リストを逆順にする
abs 絶対値にする
capitalize 最初の1文字目は大文字にし2文字目以降は小文字に変換する
default 変数が存在しない場合に、初期値を入れる
dictsort 辞書型を並び替える
escape 文字列をエスケープ文字に変換する
first リストの一番最初の値を取得する
float 浮動小数点数の指定した桁まで表示する
format 文字列をprintのように特定のフォーマットに入れて表示する
groupby 特定の値を集計する
int 数値型に変換して表示する
join リストを区切り文字をつけて1つのテキストにする
last リストの最後の要素を取得する
list 値をリストに変換する
lower 文字列を小文字に変換する
max リストなどのシーケンス内の最大値を返す
min リストなどのシーケンス内の最小値を返す
random リストなどのシーケンスの中からランダムに取り出して返す
replace 文字列の特定の文字を別の文字に変換する
reverse リストなどを逆順にする
round 浮動小数点数を四捨五入する
select リストなどのシーケンスの中の一部だけとりだす。
slice 文字列を分割する
sort リストなどのシーケンスを昇順に並び替える
sum リストなどの合計値を計算して表示する
tojson json形式に変換する
trim 文字列の端から指定の文字を削除する。指定しなければ文字列の端の空白を削除する。
upper 文字列を大文字にする
urlencode 文字列をURLエンコードする
wordcount 文字列の文字数をカウントする