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に独自フィルターを設定する方法でした。