• 2018-06-29
ウズマスター戦記
ウズマスター戦記 https://www.uzumax.org/2018/06/djangofirstof.html

Djangoのテンプレートタグ「firstof」 値が無い場合のデフォルトに便利

今回のテーマは「firstof」。
値の引数から最初の一つを取得し出力します。


最初の一つする機能

公式サイトの表現を流用させて頂くと、firstofは与えられた引数の中から False でない最初の 1 つを取得する機能です。

False でないとは回りくどい言い方ですが、要するに値があれば出力、無ければ何もしないというものです。

これと

{% firstof var1 var2 var3 %}

これは同じ。

{% if var1 %}
    {{ var1 }}
{% elif var2 %}
    {{ var2 }}
{% elif var3 %}
    {{ var3 }}
{% endif %}

まあ、こういう使い方もあるかもしれませんね。

でも率直に言って、この説明は固い。

firstofが真に活躍するのはDefaultStringしたい時ですよ。


DefaultStringに便利な機能である

DefaultStringとは「値がある時はその値を出力し、無ければデフォルト値を出力する」という意味です。

時々ありますよね。

値がある時はそれを出せば良いけど、無い時に真っ白ではイマイチだから何かデフォルト値で埋め合わせしたい。

firstofはそれに便利な機能です。

view.py

以下のソースだと、次郎の場合、hobyのパラメータに何も入っていませんね。無趣味な男です。
def tagif(request):
    context = {}
    list = []
    list.append({"name": "一郎", "age": 30, "hoby": "アニメ"})
    list.append({"name": "次郎", "age": 32, "hoby": ""})
    list.append({"name": "三郎", "age": 31, "hoby": "ゲーム"})

    context["person_list"] = list

    return render(request, 'tag_samples/tagif.html', context)

tagif.html

画面に出す場合、空白だとよく分からないから、パラメータが無い場合は「無し」と明示したい。
そんなソースがこれ。

    <table class="table table-striped table-bordered">
        <thead>
        <tr>
            <td>名前</td>
            <td>年齢</td>
            <td>趣味</td>
        </tr>
        </thead>
        <tbody>
        {% for person in person_list %}
        <tr>
            <td>{{ person.name }}</td>
            <td>{{ person.age }}</td>
            <td>{% firstof person.hoby '無し' %}</td>
        </tr>
        {% endfor %}
        </tbody>
    </table>

結果画像


ifタグで値のある/ないを分岐していたらソースが見苦しくなるので、firstofが活躍します。

これは便利ですね。

ちなみにfirstofの場合、''(空白)とNoneは両方ともFalse扱いなのでデフォルト側が表示されます。

出展

公式サイトはこちら。


バックナンバー

0 件のコメント:

コメントを投稿

お気軽にコメント下さい。