[Python] FlaskのJinjaテンプレートで、変数がNoneの場合に空文字を出力する
こんにちは、@yoheiMuneです。
今日は少しマニアックなポイントですが、FlaskアプリケーションでJinjaテンプレートを使う場合に、変数の中身がNoneだったら空文字を出力したい件をブログに書きたいと思います。
- python - Suppress "None" output as string in Jinja2 - Stack Overflow
最後になりますが本ブログでは、Python・フロントエンド・開発関連・Swift・Linux・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
今日は少しマニアックなポイントですが、FlaskアプリケーションでJinjaテンプレートを使う場合に、変数の中身がNoneだったら空文字を出力したい件をブログに書きたいと思います。
Jinjaテンプレートで変数がNoneの場合に空文字を出力する
FlaskではデフォルトのテンプレートエンジンにJinjaが採用されていて、それを用いてHTMLなどを便利に出力することができます。他の多くのテンプレートでNoneやNullやNilなどが変数に入っている場合に、空文字を出す方法はテンプレートエンジンそれぞれですが、Jinjaでは以下のようにするようです。書き方としては幾つかあります。{# 方法1:変数の値がFalseと判定されるものは空文字を出力する #} <p>{{ userName or ''}}</p> {# 方法2:defaultFilterを使うこともできます(判定条件は方法1と同じ) #} <p>{{ userName|default('a', True)}}</p> {# 方法3:上2つの場合に「0」など数値を正しく表現できないので、それを考慮したい場合は以下のように書く #} <p>{{ totalPay if totalpay != None else ''}}</p>また上記以外では、Jinjaのカスタムフィルターを定義してそれを利用する方法もあります。
# 方法4:Jinjaのカスタムフィルターを利用する # app.py from flask import Flask app = Flask(__name__) # JinjaのCustom Filterを定義する app.jinja_env.filters['sn'] = lambda str_:str_ if str_ != None else ''
<!--index.html(Jinjaテンプレート内)--> <p>{{ userName|sn }}</p> <p>{{ totalPay|sn }}</p>以上のように空文字出力を実装できます。ただお仕事でやる場合には、ユーザーの入力が想定外になることもあるので、方法3や方法4で実装した方が無難かなーと思います。
参考資料
今回の実装を行うために以下を参照しました。ありがとうございます。- python - Suppress "None" output as string in Jinja2 - Stack Overflow
最後に
テンプレートエンジンは言語やライブラリによって異なりますが、複数を扱うと良さや悪さがわかっていいですね。これからも色々と学んでブログに残していけたらと思います。最後になりますが本ブログでは、Python・フロントエンド・開発関連・Swift・Linux・Java・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!