FlaskでContext Processorsを使用する方法


概要

テンプレートで共通で使いたい変数や関数を定義するのためには、Context Processorsが便利です。

変数編

例えば、今日の日付をテンプレートで表示したい場合は、以下のようなContext Processorを定義しておくと、毎回テンプレートに渡す必要がなくなるので、便利です

@app.context_processor
def jst_today():
    from datetime import datetime, timedelta, timezone
    JST = timezone(timedelta(hours=+9), 'JST')
    jst_today = datetime.now(JST).strftime('%Y/%m/%d')
    return dict(jst_today=jst_today)

テンプレートでは以下のようにして、今日の日付を表示することができます。

{{ jst_today }}

関数編

数字に通貨の単位をつけて返す関数は、以下のようにして定義しておくと便利です。

@app.context_processor
def utility_processor():
    def format_price(amount, currency=u'円'):
        return u'{0:.2f}{1}'.format(amount, currency)
    return dict(format_price=format_price)

テンプレートでは以下のように呼び出すことができます。

{{ format_price(100) }}

参考

[1] https://flask.palletsprojects.com/en/1.1.x/templating/#context-processors