テンプレートのフィルター機能について、以前の記事で紹介したが、紹介した内容はビルトインのフィルターで初めからFlaskによって用意されているフィルターである。
ここでは、自分で使いたいようにフィルターを作成する方法について説明する。
テンプレートフィルターを自作する方法
テンプレートのフィルターを自分で作成するには、@app.template_filterを関数の前にデコレータとして追加する。
そのあと、テンプレート内でそのフィルター名を指定して利用すればよい。
@app.template_filter('my_filter') # 追加したいfilterの作成
def my_filter_function(s): # 第一引数がフィルターを適用する変数
return '×××' # フィルターを適用して返す値
・htmlファイルでフィルターを利用する
{{ variable | my_filter }} # 追加したfilterの適用
また、自作したフィルターに引数を追加したい場合には、関数に引数を追加すればよい。
以下に、指定したインデックスの文字を大文字にする自作フィルターを作成する方法を記述した。
Example
- フィルターの作成
app = Flask(__name__)
@app.template_filter('my_upper_filter')
def my_upper_filter(s, idx=0): # idxの位置だけ大文字にして、それ以外はそのまま返す
return s[:idx] + s[idx].upper() + s[idx+1:]
@app.route('/')
def index():
name = 'abcdefg'
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
- テンプレートでのフィルターの利用(index.html)
このように、ビルトインのフィルターだけでなく、フィルターを自作することもできる。