PythonのJinja2には既存でフィルターと呼ばれる機能で、HTML文字列をエスケープしてくれたり、文字列を大文字、小文字変換してくれるものがあります。
今回は独自のフィルターを作成し、templateから呼び出す方法を解説します。
PythonのJinja2に独自フィルターを設定する方法
PythonのJinja2にカスタム(独自)フィルターを設定するには「@app.template_filter」を利用します。
まずは呼び出し元のHTMLから
<!doctype html>
<html>
<head>
<title>独自フィルター設定</title>
</head>
<body>
<p>{{message | str_add }}</p>
</body>
</html>
今回は「str_add 」というカスタム(独自)フィルターを作成し、与えられた文字列の前後に文字を付加します。
次にカスタム(独自)フィルター部分のPythonのソース。
from flask import Flask, render_template
app = Flask( __name__ )
#ホームパス
@app.route( "/", methods=[ "GET" ])
def home():
#main.htmlをコールする
return render_template( "main.html", message="この前後に文字が付加されます。" )
#独自のフィルター設定(前後に文字を挿入)
@app.template_filter( "str_add" )
def func_str_add( str_data ) :
return "<<<<<" + str_data + ">>>>>"
#Main関数
if __name__ == '__main__':
app.run( debug=True, host='0.0.0.0', port=8888, threaded=True )
上記のなかで「@app.template_filter」に作成するカスタム(独自)フィルター名を指定し、その下にカスタム(独自)フィルターが指定されたときに呼び出される関数を定義するだけです。
これで「str_add」というカスタム(独自)フィルターが利用できるようになります。
このソースのを実行するには
python main.py
とコマンドを実行し、ブラウザーから
http://localhost:8888/
とアクセスするだけです。
結果はページに「<<<<<この前後に文字が付加されます。>>>>>」と表示されればOKです。
まとめ
PythonのJinja2にカスタム(独自)フィルターを設定するには「@app.template_filter」デコレーターを利用すれば簡単に作成することができます。
これでテンプレート側だけでは難しい処理もPythonの処理を呼び出せるのと同じになるので、ずっとやりやすくなります。
以上、PythonのJinja2に独自フィルターを設定する方法でした。
