如何呈现不在UL中的Django表单错误?

我的Django表单中的错误是根据文档呈现在UL中。

Django的

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

编辑:

我应该在我的例子中使用这个代码清晰…

 {{ form.fieldname.errors }} 

您可以在模板中显示您的错误如下:

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

它显然不能在字段的上下文中呈现,因为这些是属性名称暗示的“非字段错误”。 解决这个问题的唯一方法是在validation时在正确的位置添加错误。 例如,执行以下操作会导致非现场错误:

 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类的错误列表,让您可以对其外观进行devise。 如果你想进一步自定义显示的错误,你可以通过循环来实现(重点是我的)

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