私は便利な出力フォーム方式{{ form.as_ul }}
が好きですが、それでも引き続き使用できますが、各フィールドのすぐ上にエラーを表示する代わりに、すべてのエラーを事前にキャプチャする方法があります。
djangoのドキュメントに記載されているように、各フォーム要素などをループする方法があることは理解していますがform.as_ul()
、エラー表示を制御する以外の機能を引き続き利用したいと思います。
私は便利な出力フォーム方式{{ form.as_ul }}
が好きですが、それでも引き続き使用できますが、各フィールドのすぐ上にエラーを表示する代わりに、すべてのエラーを事前にキャプチャする方法があります。
djangoのドキュメントに記載されているように、各フォーム要素などをループする方法があることは理解していますがform.as_ul()
、エラー表示を制御する以外の機能を引き続き利用したいと思います。
再利用可能なフォーム テンプレートを使用して、この問題を解決しました。
それは簡単です...
必要に応じて、次のコード スニペットを使用して再利用可能なテンプレートを作成します。
すべてのエラーをフォームの上部に表示したい場合...
{% if form %}
{% if form.errors %}
{% for field in form %}
{{field.errors}}
{% endfor %}
{% endif %}
{% for field in form %}
<li>{{ field.label_tag }}: {{ field }}</li>
{% endfor %}
{% endif %}
各フォーム フィールドの直後にすべてのエラーを表示したい場合は、エラーの周りにデフォルトの html 要素を使用しません。
{% for field in form %}
{{ field.label_tag }}: {{ field }}
{% for error in field.errors %}{{ error }}{% endfor %}
{% endfor %}
2 番目のテンプレートを使用して包含タグを作成しました
私が見る唯一の方法は、新しいフォーム クラスを継承し、必要に応じてメソッドをforms.Form
変更することです。as_ul
ログインフォームなどのサードパーティのフォームを使用する場合、これはあまり良くありません (サードパーティにはこのメソッドがありません)。
最善の解決策は、独自の包含タグを作成し、それを使用してフォームをレンダリングすることだと思います。as_ul
( )と同じくらい短いです{% render_form form %}
が、非常に柔軟で、すべてのフォームで動作し、HTML と Python コードを混在させることはありません。
テンプレートでフォームをレンダリングするためのカスタマイズは非常に柔軟だと思います。私は通常、Web アプリケーションに対してこれを行います。少しの JavaScript と CSS を使用することもできますが、大きな問題にはなりません。さらに、アプリをシンプルにするように努めるべきだと思います。