PythonのJinja2に独自フィルターを設定する方法

記事内に広告が含まれています。

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

タイトルとURLをコピーしました