web-dev-qa-db-ja.com

エラーのリストをDjango形式で取得する

Djangoでフォームを作成しようとしています。これで問題なく動作しますが、エラーのある各フィールドの横ではなく、すべてのエラーをフォームの最上部に表示する必要があります。 form.errorsをループしてみましたが、エラーが発生したフィールドの名前のみが表示され、「名前が必要です」などのエラーメッセージは表示されませんでした。

これは、フォームの上部で使用できるようにしたいものです。

{% if form.??? %}
    <ul class="errorlist">
    {% for error in form.??? %}
        <li>{{ error }}</li>
    {% endfor %}
    </ul>
{% endif %}

そこで???には何を使用しますか? errorsではありません。フィールドの名前を出力するだけです。

30
icktoofay

form.errorsは辞書です。あなたがするとき{% for error in form.errors %}エラーはキーに対応します。

代わりに試してください

{% for field, errors in form.errors.items %}
    {% for error in errors %}
...

等。

57
Danny Roberts

条件付きの簡単なものが必要な場合は、次のようにします。

{% if form.errors %}
  <ul>
    {% for error in form.errors %} 
      <li>{{ error }}</li>
    {% endfor %}
  </ul>
{% endif %}  

詳細が必要で、フィールドの名前とエラーを確認するには、次のようにします。

{% if form.errors %}
  <ul>
    {% for key,value in form.errors.items %} 
      <li>{{ key|escape }} : {{ value|escape }}</li>
    {% endfor %}
  </ul>
{% endif %}

form.errorsを強調したい場合は、大きな辞書です。

2
Buky

ダニーの答えは良い考えではありません。 ValueErrorが発生する可能性があります。

これをチェックして。

       {% if form.errors %}
            {% for field in form %}
                {% for error in field.errors %}
                     {{field.label}}: {{ error|escape }}
                {% endfor %}
            {% endfor %}
            {% for error in form.non_field_errors %}
                 {{field.label}}: {{ error|escape }}
            {% endfor %}
        {% endif %}
0
sandes