Commit 9931c9e1 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Fixed #9125 -- When displaying errors for a form with only hidden fields, make...

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
parent eeb230aa
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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
+14 −0
Original line number Diff line number Diff line
@@ -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>'

"""