Подтвердить что ты не робот

Как обрабатывать ошибки формы Django не в UL?

Ошибки в моей форме Django - это рендеринг в UL в соответствии с docs...

Джанго

{{ form.non_field_errors }}

HTML

<ul class="errorlist">
  <li>Sender is required.</li>
</ul>

Как я могу визуализировать ошибки, чтобы они отображались не в UL, а в теге абзаца для каждой соответствующей ошибки? Поэтому идеально...

<ul>
  <li>
    <label>...</label>
    <input>...</input>
    <p>Error message...</p>
  </li>
</ul>

EDIT:

Я должен был использовать этот код в моем примере для ясности...

{{ form.fieldname.errors }}
4b9b3361

Ответ 1

Вы можете отобразить свою ошибку в шаблоне следующим образом:

<p>{{ form.fieldname.errors.as_text }}</p>

Ответ 2

Он явно не может отображать в контексте поля, потому что это "не-полевые ошибки", как следует из названия атрибута. Единственный способ исправить это - добавить ошибку в правильном месте при проверке. Например, делая следующие результаты при ошибках без полей:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        somefield = self.cleaned_data.get('somefield')
        if not somefield:
            raise forms.ValidationError('Some field is blank')

Однако вы можете сделать следующее, чтобы эта ошибка отображалась в правом поле:

class MyModelForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean(self):
        somefield = self.cleaned_data.get('somefield')
        if not somefield:
            if not self._errors.has_key('somefield'):
                from django.forms.util import ErrorList
                self._errors['somefield'] = ErrorList()
            self._errors['somefield'].append('Some field is blank')

UPDATE:

Из Django docs:

Каждое названное поле формы может быть выведено в шаблон с помощью {{ form.name_of_field}}, который будет вызывать HTML-код, необходимый для отображения виджет формы. Использование {{form.name_of_field.errors}} отображает список ошибок формы, отображаемых как неупорядоченный список. Это может выглядеть так:

<ul class="errorlist">
    <li>Sender is required.</li>
</ul>

В списке есть класс ошибок CSS, который позволяет вам появление. Если вы хотите дополнительно настроить отображение ошибок, вы могут сделать это, перейдя через них (внимание мое):

{% if form.subject.errors %}
    <ol>
    {% for error in form.subject.errors %}
        <li><strong>{{ error|escape }}</strong></li>
    {% endfor %}
    </ol>
{% endif %}