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]
|
||||
# Chop off the trailing row_ender (e.g. '</td></tr>') and
|
||||
# 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
|
||||
else:
|
||||
# If there aren't any rows in the output, just append the
|
||||
|
|
|
@ -88,4 +88,18 @@ doesn't come back.
|
|||
True
|
||||
>>> f.cleaned_data
|
||||
{'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