Как визуализировать ошибки формы Django не в UL? - PullRequest
50 голосов
/ 14 сентября 2011

Ошибки в моей форме Django отображаются в UL согласно документам ...

Джанго

{{ 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 }}

Ответы [ 2 ]

96 голосов
/ 15 сентября 2011

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

<p>{{ form.fieldname.errors.as_text }}</p>
13 голосов
/ 14 сентября 2011

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

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')

ОБНОВЛЕНИЕ:

Из Django документы :

Каждое именованное поле формы может быть выведено в шаблон с помощью {{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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...