2016/10/03更新

[Python] FlaskのJinjaテンプレートで、変数がNoneの場合に空文字を出力する

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
今日は少しマニアックなポイントですが、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の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。