Django のテンプレートでフォームの要素が hidden かどうかを調べる

2008/05/12 10:37am

Django の newforms library は、それだけでちいさな MVC の世界だ。テキストフィールドやラジオボタンといった View は django.newforms.widgets の Widget クラスとそのサブクラスが担当している。

フォーム要素の HTML をテンプレートで出力する簡単な例は以下のとおり。

<form method="post" action="">
{% for field in form %}
    {{ field.label_tag }}
    {{ field }}<br />
{% endfor %}
<input type="submit" />
</form>

しかし、このままだと hidden 要素でも が出力されて具合が悪い。

実は、Widget クラスには is_hidden という、その要素が hidden 要素の場合は True を返すメソッドが定義されているので、テンプレート中でこれをチェックすればいい。

<form method="post" action="">
{% for field in form %}
    {% if field.field.widget.is_hidden %}
        {{ field }}
    {% else %}
        {{ field.label_tag }}
        {{ field }}<br />
    {% endif %}
{% endfor %}
<input type="submit" />
</form>

ひとつだけ注意。ドキュメントにも書かれているように、ここでの fieldnewforms.forms.BoundField なので、実際の Field インスタンスを調べる場合は field.field とする必要がある。