Flaskのテンプレートは、フィルターという機能がある。
フィルターというのは、テンプレート上で値を変換したい場合に用いられる。
下記に、フィルターの使い方・実装方法とフィルター一覧を記載する
テンプレートのフィルターの実装方法
フィルターを利用するには、2通りの方法がある。
文全体に対して、フィルターを適用する場合には以下のようにする。
以下の場合、filter ~ endfilterに記述した内容にたいして、フィルターが適用される。
{% filter フィルター名 %}
:
{% endfilter %}
また、特定の変数に対してフィルターを行う場合には、変数名に|(パイプ)を付けて、フィルターを適用する。
{{ 変数名 | フィルター名 }}
以下に具体例を説明したい。ここでは、小文字を大文字にするフィルターupperを利用する。
Example
- ビューでテンプレートに値を渡す(view.py)
app = Flask(__name__)
@app.route('/')
def index():
name = 'taro'
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
- テンプレートの実装(index.html)
以下の例では、filter~endfilterの間、のすべての文にupperが適用される。
hi, my name is {{ name }}
{% endfilter %}
このようにすると、hi, my name is {{ name }}すべてにたいして、upperフィルターが適用されて、全て大文字になって表示される。
- 画面表示結果
次に、一部の変数に対して、フィルターを適用する。{{ 変数 | フィルター }}とすることで、変数に対してフィルターを適用できる
- テンプレートの実装(index.html)
このようにすると、hi, my name is {{ name }}のnameにたいして、upperフィルターが適用されて、全て大文字になって表示される。
- 画面表示結果
フィルター一覧
参考: 公式サイト
上の例では、大文字化をするupperフィルターについて紹介したが、他にも様々なフィルターを利用することができる。
- 代表的なフィルター一覧
フィルター名 | 処理内容 |
---|---|
abs | 絶対値にして返す |
attr | 属性を指定して値を返す。foo|attr("bar") とするとfoo.barと同じようにfooのbarキーを返す |
capitalize | 最初は大文字、あとは小文字に変換する |
default | 変数が存在しない場合に、デフォルト値を入れる(例: {{ my_variable|default('my_variable is not defined') }}) |
dictsort | 辞書型を並び替える |
escape | 文字列をエスケープ文字に変換する |
filesizeformat | kB, MBなどの読みやすいファイルの容量のフォーマットに変換する |
first | リストなどのシーケンスの一番最初の値を返す |
float | 浮動小数点数の指定した桁まで表示する |
format | 文字列をprintのように特定のフォーマットに入れて表示する(例: {{ "%s, %s!"|format(greeting, name) }}) |
groupby | リストに対して、特定のキーに対してgroupbyをして集計する |
int | 数値型に変換して表示する |
join | リスト型などを引っ付ける(例: {{ [1, 2, 3]|join('|') }} -> 1|2|3) |
last | リストなどのシーケンスの一番最後の値を返す |
list | 値をリストに変換する |
lower | 文字列を小文字に変換する |
map | リストなどのシーケンス内の各値に対して、フィルターを適用したい場合に用いる |
max | リストなどのシーケンス内の最大値を返す |
min | リストなどのシーケンス内の最小値を返す |
random | リストなどのシーケンスの中からランダムに取り出して返す |
reject | リストなどのシーケンスの中から特定のものだけはじく(例:{{ numbers|reject("odd") }}# oddは奇数なので奇数インデックスのものを削除して取り出す) |
rejectattr | リストなどのシーケンスの中の値の属性を元に特定のものだけはじく(例:{{ users|rejectattr("is_active") }} |
replace | 文字列の特定の文字を別の文字に変換する |
reverse | リストなどを逆順にする |
round | 浮動小数点数を四捨五入する |
safe | 文字列をエスケープせずに表示する(文字列が安全な場合に利用する) |
select | リストなどのシーケンスの中の一部だけとりだす。({{ numbers| select('odd') }}# oddは奇数なので奇数インデックスのものを取り出す) |
selectattr | リストなどのシーケンスの中の値の属性を元に特定のものだけとりだす。({{ users|selectattr("is_active") }} # usersの中でis_activeがTrueのものだけ取り出す |
slice | 文字列などを、指定した数で分割する(例: items|slice(3) itemsを3分割する) |
sort | リストなどのシーケンスを昇順に並び替える |
string | 文字列Unicodeに変換する |
sum | リストなどの合計値を計算して表示する |
title | 文字列の1文字目を大文字に、残りを小文字にする |
tojson | jsonに変換する |
trim | 文字列の端から特定の文字を削除する。デフォルトで文字列の端の空白を削除する。 |
unique | リストなどのシーケンスからユニークなものだけ取り出す |
upper | 文字列を大文字にする |
urlencode | 文字列をURLエンコードする |
urlize | 文字列内のURLを画面遷移できるようにする |
wordcount | 文字列の存在する文字の数をカウントする |