日記

日々のことと、Python/Django/PHP/Laravel/nodejs などソフトウェア開発のことを書き綴ります

フィルタを使って、値を変換する

ifを使って、Noneの値を出し分けたりしましたが、Noneのときにはデフォルト値(ゼロとか未選択を出したい!)を表示したい時には何となく冗長です。
そんなときには、フィルタを使うとスマートな表記ができます。

前回の views.pyはそのまま利用して、htmlテンプレートを編集します。

<html>
<head>
</head>
<body>
<p>サンプルアプリケーション はじめの一歩</p>

<p>{{ none_data|default:"Noneは置き換えられます" }}</p>

<p>{{ empty_data|default:"空文字列も置き換えます" }}</p>

<p>{{ none_data|default_if_none:"Noneは置き換えられます" }}</p>

<p>{{ empty_data|default_if_none:"空文字列は置き換えられません。" }}</p>

<p>{{ abc|urlencode }}</p>

</body>
</html>

修正した後にブラウザでアクセスすると次のようになります。

<html>
<head>
</head>
<body>
<p>サンプルアプリケーション はじめの一歩</p>

<p>Noneは置き換えられます</p>

<p>空文字列も置き換えます</p>

<p>Noneは置き換えられます</p>

<p></p>

<p>abc%E3%81%A7%E3%81%99%E3%81%A8%EF%BC%81</p>

</body>
</html>

defaultとdefault_if_noneでは挙動が異なり、defaultは Noneも空文字列も変換対象になりますが、default_if_noneでは、Noneだけが変換対象となります。
また、URLエンコードもフィルターで簡単に実現できます。しかし、エンコードする文字列の文字コードはシステムデフォルトの文字コードが使われるので注意が必要で、デフォルト以外の文字コードエンコードしたい場合は、Viewで実装するか、新たに自分でフィルターの実装が必要です。

ということで、次回はフィルターを実装してみます。