<p>我在一个自定义表单类中解决了这个问题,我的所有表单都继承了这个类,而不是<code>django.forms.Form</code>。在这里,我改变了<code>form.errors</code>的工作方式,返回一个自定义的<code>ErrorDict</code>,其<code>as_ul</code>方法考虑了标签。因此,您不需要更改模板,但需要让表单继承<code>CustomBaseForm</code>。</p>
<pre><code>class CustomErrorDict(ErrorDict):
def __init__(self, form, iterable=None, **kwargs):
self.form = form
super(CustomErrorDict, self).__init__(iterable, **kwargs)
def as_ul(self):
if not self:
return u''
def humanify(field_name):
try:
return self.form.fields[field_name].label or field_name
except:
return field_name
# main logic is copied from the original ErrorDict:
return mark_safe(u'<ul class="errorlist">%s</ul>'
% ''.join([u'<li>%s%s</li>' % (humanify(k), force_unicode(v))
for k, v in self.items()]))
class CustomBaseForm(forms.Form):
@property
def errors(self):
return CustomErrorDict(self, super(forms.Form, self).errors)
... rest of CustomBaseForm ...
</code></pre>