Fixed #9125 -- When displaying errors for a form with only hidden fields, make sure the resulting XHTML is correct.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@9067 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
eeb230aa1c
commit
9931c9e132
|
@ -171,6 +171,13 @@ class BaseForm(StrAndUnicode):
|
||||||
last_row = output[-1]
|
last_row = output[-1]
|
||||||
# Chop off the trailing row_ender (e.g. '</td></tr>') and
|
# Chop off the trailing row_ender (e.g. '</td></tr>') and
|
||||||
# insert the hidden fields.
|
# insert the hidden fields.
|
||||||
|
if not last_row.endswith(row_ender):
|
||||||
|
# This can happen in the as_p() case (and possibly others
|
||||||
|
# that users write): if there are only top errors, we may
|
||||||
|
# not be able to conscript the last row for our purposes,
|
||||||
|
# so insert a new, empty row.
|
||||||
|
last_row = normal_row % {'errors': '', 'label': '', 'field': '', 'help_text': ''}
|
||||||
|
output.append(last_row)
|
||||||
output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
|
output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender
|
||||||
else:
|
else:
|
||||||
# If there aren't any rows in the output, just append the
|
# If there aren't any rows in the output, just append the
|
||||||
|
|
|
@ -88,4 +88,18 @@ doesn't come back.
|
||||||
True
|
True
|
||||||
>>> f.cleaned_data
|
>>> f.cleaned_data
|
||||||
{'data': u'xyzzy'}
|
{'data': u'xyzzy'}
|
||||||
|
|
||||||
|
A form with *only* hidden fields that has errors is going to be very unusual.
|
||||||
|
But we can try to make sure it doesn't generate invalid XHTML. In this case,
|
||||||
|
the as_p() method is the tricky one, since error lists cannot be nested
|
||||||
|
(validly) inside p elements.
|
||||||
|
|
||||||
|
>>> class HiddenForm(Form):
|
||||||
|
... data = IntegerField(widget=HiddenInput)
|
||||||
|
>>> f = HiddenForm({})
|
||||||
|
>>> f.as_p()
|
||||||
|
u'<ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul>\n<p> <input type="hidden" name="data" id="id_data" /></p>'
|
||||||
|
>>> f.as_table()
|
||||||
|
u'<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul><input type="hidden" name="data" id="id_data" /></td></tr>'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue