我喜欢Django执行表单验证的方式。但是,我想覆盖错误显示的方式。我想将表单验证错误发送到我的网页顶部(到特定的div标签),而不是让Django在无效的表单字段旁边显示错误。有什么建议吗?
答案 0 :(得分:2)
您只需在模板顶部指定{{ form.errors }}
即可轻松完成此操作,而不是将{{ field.errors }}
放在每个字段级别。
我怀疑你的问题是,你只是使用{{ form.as_p }}
标签或其中一个兄弟,一次输出整个表格。如果要根据需要自定义显示,请不要这样做。用一个简单的for循环替换它来通过每个字段并显示它的label_tag
和字段本身并不是很困难,并且你从增加的控制中获益匪浅。
答案 1 :(得分:0)
http://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template
“可以使用{{form.name-of-field}}将每个命名的表单字段输出到模板,这将生成显示表单窗口小部件所需的HTML。使用{{form.name-of-field .errors}}显示字段错误列表....“
答案 2 :(得分:0)
我建议你覆盖表单的as_XXX方法,在我的情况下,我重写as_p:
def html_output(self, normal_row, help_text_html):
"Helper function for outputting HTML"
output = []
for name, field in self.fields.items():
html_class_attr = ''
bf = BoundField(self, field, name)
if bf.is_hidden:
hidden_fields.append(unicode(bf))
else:
css_classes = bf.css_classes()
if css_classes:
html_class_attr = ' class="%s"' % css_classes
if bf.label:
label = conditional_escape(force_unicode(bf.label))
if self.label_suffix:
if label[-1] not in ':?.!':
label += self.label_suffix
label = bf.label_tag(label) or ''
else:
label = ''
if field.help_text:
help_text = help_text_html % force_unicode(field.help_text)
else:
help_text = u''
output.append(normal_row % {
'label': force_unicode(label),
'field': unicode(bf),
'help_text': help_text,
'html_class_attr': html_class_attr
})
return mark_safe(u'\n'.join(output))
def as_p(self):
"Returns this form rendered as HTML <p>s."
return self.html_output(
normal_row = u'<p%(html_class_attr)s>%(label)s %(field)s%(help_text)s</p>',
help_text_html = u' <span class="helptext">%s</span>')
虽然有点难看。希望它有所帮助。