Ответ 1
Вы можете отобразить свою ошибку в шаблоне следующим образом:
<p>{{ form.fieldname.errors.as_text }}</p>
Ошибки в моей форме 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 }}
Вы можете отобразить свою ошибку в шаблоне следующим образом:
<p>{{ form.fieldname.errors.as_text }}</p>
Он явно не может отображать в контексте поля, потому что это "не-полевые ошибки", как следует из названия атрибута. Единственный способ исправить это - добавить ошибку в правильном месте при проверке. Например, делая следующие результаты при ошибках без полей:
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 %}