Django のテンプレートでフォームの要素が hidden かどうかを調べる
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>
ひとつだけ注意。ドキュメントにも書かれているように、ここでの field
は newforms.forms.BoundField
なので、実際の Field
インスタンスを調べる場合は field.field
とする必要がある。