Kaydet (Commit) 50e299db authored tarafından Jon Dufresne's avatar Jon Dufresne Kaydeden (comit) Tim Graham

Fixed #26928 -- Changed forms' checked attribute to HTML5 boolean style.

üst ebed9ee8
...@@ -481,9 +481,7 @@ class CheckboxInput(Widget): ...@@ -481,9 +481,7 @@ class CheckboxInput(Widget):
self.check_test = boolean_check if check_test is None else check_test self.check_test = boolean_check if check_test is None else check_test
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
final_attrs = self.build_attrs(attrs, type='checkbox', name=name) final_attrs = self.build_attrs(attrs, type='checkbox', name=name, checked=self.check_test(value))
if self.check_test(value):
final_attrs['checked'] = 'checked'
if not (value is True or value is False or value is None or value == ''): if not (value is True or value is False or value is None or value == ''):
# Only add the 'value' attribute if a value is non-empty. # Only add the 'value' attribute if a value is non-empty.
final_attrs['value'] = force_text(value) final_attrs['value'] = force_text(value)
...@@ -646,9 +644,13 @@ class ChoiceInput(SubWidget): ...@@ -646,9 +644,13 @@ class ChoiceInput(SubWidget):
def tag(self, attrs=None): def tag(self, attrs=None):
attrs = attrs or self.attrs attrs = attrs or self.attrs
final_attrs = dict(attrs, type=self.input_type, name=self.name, value=self.choice_value) final_attrs = dict(
if self.is_checked(): attrs,
final_attrs['checked'] = 'checked' type=self.input_type,
name=self.name,
value=self.choice_value,
checked=self.is_checked(),
)
return format_html('<input{} />', flatatt(final_attrs)) return format_html('<input{} />', flatatt(final_attrs))
@property @property
......
...@@ -430,7 +430,7 @@ If the form is bound to data, the HTML output will include that data ...@@ -430,7 +430,7 @@ If the form is bound to data, the HTML output will include that data
appropriately. For example, if a field is represented by an appropriately. For example, if a field is represented by an
``<input type="text">``, the data will be in the ``value`` attribute. If a ``<input type="text">``, the data will be in the ``value`` attribute. If a
field is represented by an ``<input type="checkbox">``, then that HTML will field is represented by an ``<input type="checkbox">``, then that HTML will
include ``checked="checked"`` if appropriate:: include ``checked`` if appropriate::
>>> data = {'subject': 'hello', >>> data = {'subject': 'hello',
... 'message': 'Hi there', ... 'message': 'Hi there',
...@@ -441,7 +441,12 @@ include ``checked="checked"`` if appropriate:: ...@@ -441,7 +441,12 @@ include ``checked="checked"`` if appropriate::
<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" required /></td></tr> <tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" required /></td></tr>
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" required /></td></tr> <tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" required /></td></tr>
<tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" value="foo@example.com" required /></td></tr> <tr><th><label for="id_sender">Sender:</label></th><td><input type="email" name="sender" id="id_sender" value="foo@example.com" required /></td></tr>
<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked="checked" /></td></tr> <tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" checked /></td></tr>
.. versionchanged:: 1.11
The ``checked`` attribute was changed to use HTML5 boolean syntax rather
than ``checked="checked"``.
This default output is a two-column HTML table, with a ``<tr>`` for each field. This default output is a two-column HTML table, with a ``<tr>`` for each field.
Notice the following: Notice the following:
...@@ -471,6 +476,10 @@ Notice the following: ...@@ -471,6 +476,10 @@ Notice the following:
attributes and ``<label>`` tags are included in the output by default, to attributes and ``<label>`` tags are included in the output by default, to
follow best practices, but you can change that behavior. follow best practices, but you can change that behavior.
* The output uses HTML5 syntax, targeting ``<!DOCTYPE html>``. For example,
it uses boolean attributes such as ``checked`` rather than the XHTML style
of ``checked='checked'``.
Although ``<table>`` output is the default output style when you ``print`` a Although ``<table>`` output is the default output style when you ``print`` a
form, other output styles are available. Each style is available as a method on form, other output styles are available. Each style is available as a method on
a form object, and each rendering method returns a Unicode object. a form object, and each rendering method returns a Unicode object.
...@@ -751,19 +760,19 @@ method you're using:: ...@@ -751,19 +760,19 @@ method you're using::
<tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" required /></td></tr> <tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" required /></td></tr>
<tr><th>Message:</th><td><input type="text" name="message" value="Hi there" required /></td></tr> <tr><th>Message:</th><td><input type="text" name="message" value="Hi there" required /></td></tr>
<tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid email address.</li></ul><input type="email" name="sender" value="invalid email address" required /></td></tr> <tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid email address.</li></ul><input type="email" name="sender" value="invalid email address" required /></td></tr>
<tr><th>Cc myself:</th><td><input checked="checked" type="checkbox" name="cc_myself" /></td></tr> <tr><th>Cc myself:</th><td><input checked type="checkbox" name="cc_myself" /></td></tr>
>>> print(f.as_ul()) >>> print(f.as_ul())
<li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" required /></li> <li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" required /></li>
<li>Message: <input type="text" name="message" value="Hi there" required /></li> <li>Message: <input type="text" name="message" value="Hi there" required /></li>
<li><ul class="errorlist"><li>Enter a valid email address.</li></ul>Sender: <input type="email" name="sender" value="invalid email address" required /></li> <li><ul class="errorlist"><li>Enter a valid email address.</li></ul>Sender: <input type="email" name="sender" value="invalid email address" required /></li>
<li>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></li> <li>Cc myself: <input checked type="checkbox" name="cc_myself" /></li>
>>> print(f.as_p()) >>> print(f.as_p())
<p><ul class="errorlist"><li>This field is required.</li></ul></p> <p><ul class="errorlist"><li>This field is required.</li></ul></p>
<p>Subject: <input type="text" name="subject" maxlength="100" required /></p> <p>Subject: <input type="text" name="subject" maxlength="100" required /></p>
<p>Message: <input type="text" name="message" value="Hi there" required /></p> <p>Message: <input type="text" name="message" value="Hi there" required /></p>
<p><ul class="errorlist"><li>Enter a valid email address.</li></ul></p> <p><ul class="errorlist"><li>Enter a valid email address.</li></ul></p>
<p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p>
<p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p>
.. _ref-forms-error-list-format: .. _ref-forms-error-list-format:
...@@ -789,7 +798,7 @@ Python 2):: ...@@ -789,7 +798,7 @@ Python 2)::
<p>Message: <input type="text" name="message" value="Hi there" required /></p> <p>Message: <input type="text" name="message" value="Hi there" required /></p>
<div class="errorlist"><div class="error">Enter a valid email address.</div></div> <div class="errorlist"><div class="error">Enter a valid email address.</div></div>
<p>Sender: <input type="email" name="sender" value="invalid email address" required /></p> <p>Sender: <input type="email" name="sender" value="invalid email address" required /></p>
<p>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></p> <p>Cc myself: <input checked type="checkbox" name="cc_myself" /></p>
More granular output More granular output
==================== ====================
......
...@@ -11,6 +11,10 @@ A widget is Django's representation of an HTML input element. The widget ...@@ -11,6 +11,10 @@ A widget is Django's representation of an HTML input element. The widget
handles the rendering of the HTML, and the extraction of data from a GET/POST handles the rendering of the HTML, and the extraction of data from a GET/POST
dictionary that corresponds to the widget. dictionary that corresponds to the widget.
The HTML generated by the built-in widgets uses HTML5 syntax, targeting
``<!DOCTYPE html>``. For example, it uses boolean attributes such as ``checked``
rather than the XHTML style of ``checked='checked'``.
.. tip:: .. tip::
Widgets should not be confused with the :doc:`form fields </ref/forms/fields>`. Widgets should not be confused with the :doc:`form fields </ref/forms/fields>`.
......
...@@ -354,6 +354,9 @@ Miscellaneous ...@@ -354,6 +354,9 @@ Miscellaneous
argument. Remove it because it doesn't have an effect in older versions of argument. Remove it because it doesn't have an effect in older versions of
Django as these fields alway strip whitespace. Django as these fields alway strip whitespace.
* The ``checked`` attribute rendered by form widgets now uses HTML5 boolean
syntax rather than XHTML's ``checked='checked'``.
.. _deprecated-features-1.11: .. _deprecated-features-1.11:
Features deprecated in 1.11 Features deprecated in 1.11
......
...@@ -423,19 +423,19 @@ class FormsTestCase(SimpleTestCase): ...@@ -423,19 +423,19 @@ class FormsTestCase(SimpleTestCase):
self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" value="test@example.com" required />') self.assertHTMLEqual(str(f['email']), '<input type="email" name="email" value="test@example.com" required />')
self.assertHTMLEqual( self.assertHTMLEqual(
str(f['get_spam']), str(f['get_spam']),
'<input checked="checked" type="checkbox" name="get_spam" required />', '<input checked type="checkbox" name="get_spam" required />',
) )
# 'True' or 'true' should be rendered without a value attribute # 'True' or 'true' should be rendered without a value attribute
f = SignupForm({'email': 'test@example.com', 'get_spam': 'True'}, auto_id=False) f = SignupForm({'email': 'test@example.com', 'get_spam': 'True'}, auto_id=False)
self.assertHTMLEqual( self.assertHTMLEqual(
str(f['get_spam']), str(f['get_spam']),
'<input checked="checked" type="checkbox" name="get_spam" required />', '<input checked type="checkbox" name="get_spam" required />',
) )
f = SignupForm({'email': 'test@example.com', 'get_spam': 'true'}, auto_id=False) f = SignupForm({'email': 'test@example.com', 'get_spam': 'true'}, auto_id=False)
self.assertHTMLEqual( self.assertHTMLEqual(
str(f['get_spam']), '<input checked="checked" type="checkbox" name="get_spam" required />') str(f['get_spam']), '<input checked type="checkbox" name="get_spam" required />')
# A value of 'False' or 'false' should be rendered unchecked # A value of 'False' or 'false' should be rendered unchecked
f = SignupForm({'email': 'test@example.com', 'get_spam': 'False'}, auto_id=False) f = SignupForm({'email': 'test@example.com', 'get_spam': 'False'}, auto_id=False)
...@@ -808,20 +808,20 @@ Java</label></li> ...@@ -808,20 +808,20 @@ Java</label></li>
</ul>""") </ul>""")
f = SongForm({'composers': ['J']}, auto_id=False) f = SongForm({'composers': ['J']}, auto_id=False)
self.assertHTMLEqual(str(f['composers']), """<ul> self.assertHTMLEqual(str(f['composers']), """<ul>
<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li> <li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li>
<li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> <li><label><input type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
</ul>""") </ul>""")
f = SongForm({'composers': ['J', 'P']}, auto_id=False) f = SongForm({'composers': ['J', 'P']}, auto_id=False)
self.assertHTMLEqual(str(f['composers']), """<ul> self.assertHTMLEqual(str(f['composers']), """<ul>
<li><label><input checked="checked" type="checkbox" name="composers" value="J" /> John Lennon</label></li> <li><label><input checked type="checkbox" name="composers" value="J" /> John Lennon</label></li>
<li><label><input checked="checked" type="checkbox" name="composers" value="P" /> Paul McCartney</label></li> <li><label><input checked type="checkbox" name="composers" value="P" /> Paul McCartney</label></li>
</ul>""") </ul>""")
# Test iterating on individual checkboxes in a template # Test iterating on individual checkboxes in a template
t = Template('{% for checkbox in form.composers %}<div class="mycheckbox">{{ checkbox }}</div>{% endfor %}') t = Template('{% for checkbox in form.composers %}<div class="mycheckbox">{{ checkbox }}</div>{% endfor %}')
self.assertHTMLEqual(t.render(Context({'form': f})), """<div class="mycheckbox"><label> self.assertHTMLEqual(t.render(Context({'form': f})), """<div class="mycheckbox"><label>
<input checked="checked" name="composers" type="checkbox" value="J" /> John Lennon</label></div> <input checked name="composers" type="checkbox" value="J" /> John Lennon</label></div>
<div class="mycheckbox"><label> <div class="mycheckbox"><label>
<input checked="checked" name="composers" type="checkbox" value="P" /> Paul McCartney</label></div>""") <input checked name="composers" type="checkbox" value="P" /> Paul McCartney</label></div>""")
def test_checkbox_auto_id(self): def test_checkbox_auto_id(self):
# Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox # Regarding auto_id, CheckboxSelectMultiple is a special case. Each checkbox
......
...@@ -44,15 +44,15 @@ class FormsWidgetTests(SimpleTestCase): ...@@ -44,15 +44,15 @@ class FormsWidgetTests(SimpleTestCase):
) )
) )
self.assertHTMLEqual('\n'.join(inp_set1), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label> self.assertHTMLEqual('\n'.join(inp_set1), """<label><input checked type="radio" name="beatle" value="J" /> John</label>
<label><input type="radio" name="beatle" value="P" /> Paul</label> <label><input type="radio" name="beatle" value="P" /> Paul</label>
<label><input type="radio" name="beatle" value="G" /> George</label> <label><input type="radio" name="beatle" value="G" /> George</label>
<label><input type="radio" name="beatle" value="R" /> Ringo</label>""") <label><input type="radio" name="beatle" value="R" /> Ringo</label>""")
self.assertHTMLEqual('\n'.join(inp_set2), """<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label><br /> self.assertHTMLEqual('\n'.join(inp_set2), """<label><input checked type="radio" name="beatle" value="J" /> John</label><br />
<label><input type="radio" name="beatle" value="P" /> Paul</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br />
<label><input type="radio" name="beatle" value="G" /> George</label><br /> <label><input type="radio" name="beatle" value="G" /> George</label><br />
<label><input type="radio" name="beatle" value="R" /> Ringo</label><br />""") <label><input type="radio" name="beatle" value="R" /> Ringo</label><br />""")
self.assertHTMLEqual('\n'.join(inp_set3), """<p><input checked="checked" type="radio" name="beatle" value="J" /> John</p> self.assertHTMLEqual('\n'.join(inp_set3), """<p><input checked type="radio" name="beatle" value="J" /> John</p>
<p><input type="radio" name="beatle" value="P" /> Paul</p> <p><input type="radio" name="beatle" value="P" /> Paul</p>
<p><input type="radio" name="beatle" value="G" /> George</p> <p><input type="radio" name="beatle" value="G" /> George</p>
<p><input type="radio" name="beatle" value="R" /> Ringo</p>""") <p><input type="radio" name="beatle" value="R" /> Ringo</p>""")
...@@ -67,7 +67,7 @@ beatle J R Ringo False""") ...@@ -67,7 +67,7 @@ beatle J R Ringo False""")
self.assertHTMLEqual(str(r[1]), '<label><input type="radio" name="beatle" value="P" /> Paul</label>') self.assertHTMLEqual(str(r[1]), '<label><input type="radio" name="beatle" value="P" /> Paul</label>')
self.assertHTMLEqual( self.assertHTMLEqual(
str(r[0]), str(r[0]),
'<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>' '<label><input checked type="radio" name="beatle" value="J" /> John</label>'
) )
self.assertTrue(r[0].is_checked()) self.assertTrue(r[0].is_checked())
self.assertFalse(r[1].is_checked()) self.assertFalse(r[1].is_checked())
...@@ -91,7 +91,7 @@ beatle J R Ringo False""") ...@@ -91,7 +91,7 @@ beatle J R Ringo False""")
w.render('beatle', 'G'), w.render('beatle', 'G'),
"""<label><input type="radio" name="beatle" value="J" /> John</label><br /> """<label><input type="radio" name="beatle" value="J" /> John</label><br />
<label><input type="radio" name="beatle" value="P" /> Paul</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br />
<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br /> <label><input checked type="radio" name="beatle" value="G" /> George</label><br />
<label><input type="radio" name="beatle" value="R" /> Ringo</label>""" <label><input type="radio" name="beatle" value="R" /> Ringo</label>"""
) )
...@@ -103,7 +103,7 @@ beatle J R Ringo False""") ...@@ -103,7 +103,7 @@ beatle J R Ringo False""")
w.render('beatle', 'G'), w.render('beatle', 'G'),
"""<label><input type="radio" name="beatle" value="J" /> John</label><br /> """<label><input type="radio" name="beatle" value="J" /> John</label><br />
<label><input type="radio" name="beatle" value="P" /> Paul</label><br /> <label><input type="radio" name="beatle" value="P" /> Paul</label><br />
<label><input checked="checked" type="radio" name="beatle" value="G" /> George</label><br /> <label><input checked type="radio" name="beatle" value="G" /> George</label><br />
<label><input type="radio" name="beatle" value="R" /> Ringo</label>""" <label><input type="radio" name="beatle" value="R" /> Ringo</label>"""
) )
...@@ -118,7 +118,7 @@ beatle J R Ringo False""") ...@@ -118,7 +118,7 @@ beatle J R Ringo False""")
self.assertHTMLEqual( self.assertHTMLEqual(
output, output,
"""<div id="bar"> """<div id="bar">
<p><label for="bar_0"><input checked="checked" type="radio" id="bar_0" value="J" name="beatle" /> John</label></p> <p><label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label></p>
<p><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></p> <p><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></p>
<p><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></p> <p><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></p>
<p><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></p> <p><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></p>
...@@ -133,18 +133,18 @@ beatle J R Ringo False""") ...@@ -133,18 +133,18 @@ beatle J R Ringo False""")
choices=zip('abc', 'ABC') choices=zip('abc', 'ABC')
).subwidgets('letters', list('ac')) ).subwidgets('letters', list('ac'))
), ),
"""<input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> """<input checked type="checkbox" name="letters" value="a" id="abc_0" />
<input type="checkbox" name="letters" value="b" id="abc_1" /> <input type="checkbox" name="letters" value="b" id="abc_1" />
<input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" />""") <input checked type="checkbox" name="letters" value="c" id="abc_2" />""")
# Each subwidget tag does not get an ID if the widget does not have an ID specified # Each subwidget tag does not get an ID if the widget does not have an ID specified
self.assertHTMLEqual( self.assertHTMLEqual(
"\n".join(c.tag() for c in CheckboxSelectMultiple( "\n".join(c.tag() for c in CheckboxSelectMultiple(
choices=zip('abc', 'ABC'), choices=zip('abc', 'ABC'),
).subwidgets('letters', list('ac'))), ).subwidgets('letters', list('ac'))),
"""<input checked="checked" type="checkbox" name="letters" value="a" /> """<input checked type="checkbox" name="letters" value="a" />
<input type="checkbox" name="letters" value="b" /> <input type="checkbox" name="letters" value="b" />
<input checked="checked" type="checkbox" name="letters" value="c" />""") <input checked type="checkbox" name="letters" value="c" />""")
# The id_for_label property of the subwidget should return the ID that is used on the subwidget's tag # The id_for_label property of the subwidget should return the ID that is used on the subwidget's tag
self.assertHTMLEqual( self.assertHTMLEqual(
......
...@@ -18,7 +18,7 @@ class CheckboxInputTest(WidgetTest): ...@@ -18,7 +18,7 @@ class CheckboxInputTest(WidgetTest):
def test_render_true(self): def test_render_true(self):
self.check_html( self.check_html(
self.widget, 'is_cool', True, self.widget, 'is_cool', True,
html='<input checked="checked" type="checkbox" name="is_cool" />' html='<input checked type="checkbox" name="is_cool" />'
) )
def test_render_value(self): def test_render_value(self):
...@@ -28,7 +28,7 @@ class CheckboxInputTest(WidgetTest): ...@@ -28,7 +28,7 @@ class CheckboxInputTest(WidgetTest):
""" """
self.check_html( self.check_html(
self.widget, 'is_cool', 'foo', self.widget, 'is_cool', 'foo',
html='<input checked="checked" type="checkbox" name="is_cool" value="foo" />', html='<input checked type="checkbox" name="is_cool" value="foo" />',
) )
def test_render_int(self): def test_render_int(self):
...@@ -37,11 +37,11 @@ class CheckboxInputTest(WidgetTest): ...@@ -37,11 +37,11 @@ class CheckboxInputTest(WidgetTest):
""" """
self.check_html( self.check_html(
self.widget, 'is_cool', 0, self.widget, 'is_cool', 0,
html='<input checked="checked" type="checkbox" name="is_cool" value="0" />', html='<input checked type="checkbox" name="is_cool" value="0" />',
) )
self.check_html( self.check_html(
self.widget, 'is_cool', 1, self.widget, 'is_cool', 1,
html='<input checked="checked" type="checkbox" name="is_cool" value="1" />', html='<input checked type="checkbox" name="is_cool" value="1" />',
) )
def test_render_check_test(self): def test_render_check_test(self):
...@@ -54,13 +54,13 @@ class CheckboxInputTest(WidgetTest): ...@@ -54,13 +54,13 @@ class CheckboxInputTest(WidgetTest):
'<input type="checkbox" name="greeting" />' '<input type="checkbox" name="greeting" />'
)) ))
self.check_html(widget, 'greeting', 'hello', html=( self.check_html(widget, 'greeting', 'hello', html=(
'<input checked="checked" type="checkbox" name="greeting" value="hello" />' '<input checked type="checkbox" name="greeting" value="hello" />'
)) ))
self.check_html(widget, 'greeting', 'hello there', html=( self.check_html(widget, 'greeting', 'hello there', html=(
'<input checked="checked" type="checkbox" name="greeting" value="hello there" />' '<input checked type="checkbox" name="greeting" value="hello there" />'
)) ))
self.check_html(widget, 'greeting', 'hello & goodbye', html=( self.check_html(widget, 'greeting', 'hello & goodbye', html=(
'<input checked="checked" type="checkbox" name="greeting" value="hello &amp; goodbye" />' '<input checked type="checkbox" name="greeting" value="hello &amp; goodbye" />'
)) ))
def test_render_check_exception(self): def test_render_check_exception(self):
......
...@@ -9,7 +9,7 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -9,7 +9,7 @@ class CheckboxSelectMultipleTest(WidgetTest):
def test_render_value(self): def test_render_value(self):
self.check_html(self.widget(choices=self.beatles), 'beatles', ['J'], html=( self.check_html(self.widget(choices=self.beatles), 'beatles', ['J'], html=(
"""<ul> """<ul>
<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li> <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li>
<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li> <li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
...@@ -19,8 +19,8 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -19,8 +19,8 @@ class CheckboxSelectMultipleTest(WidgetTest):
def test_render_value_multiple(self): def test_render_value_multiple(self):
self.check_html(self.widget(choices=self.beatles), 'beatles', ['J', 'P'], html=( self.check_html(self.widget(choices=self.beatles), 'beatles', ['J', 'P'], html=(
"""<ul> """<ul>
<li><label><input checked="checked" type="checkbox" name="beatles" value="J" /> John</label></li> <li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li>
<li><label><input checked="checked" type="checkbox" name="beatles" value="P" /> Paul</label></li> <li><label><input checked type="checkbox" name="beatles" value="P" /> Paul</label></li>
<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li> <li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li> <li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
</ul>""" </ul>"""
...@@ -53,7 +53,7 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -53,7 +53,7 @@ class CheckboxSelectMultipleTest(WidgetTest):
<li>Audio<ul id="media_1"> <li>Audio<ul id="media_1">
<li> <li>
<label for="media_1_0"> <label for="media_1_0">
<input checked="checked" id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl <input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl
</label> </label>
</li> </li>
<li> <li>
...@@ -66,7 +66,7 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -66,7 +66,7 @@ class CheckboxSelectMultipleTest(WidgetTest):
</li> </li>
<li> <li>
<label for="media_2_1"> <label for="media_2_1">
<input checked="checked" id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD <input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD
</label> </label>
</li> </li>
</ul></li> </ul></li>
...@@ -85,11 +85,11 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -85,11 +85,11 @@ class CheckboxSelectMultipleTest(WidgetTest):
html = """ html = """
<ul id="abc"> <ul id="abc">
<li> <li>
<label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label> <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label>
</li> </li>
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li>
<li> <li>
<label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label> <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label>
</li> </li>
</ul> </ul>
""" """
...@@ -103,11 +103,11 @@ class CheckboxSelectMultipleTest(WidgetTest): ...@@ -103,11 +103,11 @@ class CheckboxSelectMultipleTest(WidgetTest):
html = """ html = """
<ul id="abc"> <ul id="abc">
<li> <li>
<label for="abc_0"><input checked="checked" type="checkbox" name="letters" value="a" id="abc_0" /> A</label> <label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label>
</li> </li>
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li> <li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li>
<li> <li>
<label for="abc_2"><input checked="checked" type="checkbox" name="letters" value="c" id="abc_2" /> C</label> <label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label>
</li> </li>
</ul> </ul>
""" """
......
...@@ -9,7 +9,7 @@ class RadioSelectTest(WidgetTest): ...@@ -9,7 +9,7 @@ class RadioSelectTest(WidgetTest):
def test_render(self): def test_render(self):
self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', html=( self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', html=(
"""<ul> """<ul>
<li><label><input checked="checked" type="radio" name="beatle" value="J" /> John</label></li> <li><label><input checked type="radio" name="beatle" value="J" /> John</label></li>
<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li> <li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
<li><label><input type="radio" name="beatle" value="G" /> George</label></li> <li><label><input type="radio" name="beatle" value="G" /> George</label></li>
<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li> <li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
...@@ -37,7 +37,7 @@ class RadioSelectTest(WidgetTest): ...@@ -37,7 +37,7 @@ class RadioSelectTest(WidgetTest):
<li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li> <li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li>
<li> <li>
<label for="media_2_1"> <label for="media_2_1">
<input checked="checked" id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD <input checked id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD
</label> </label>
</li> </li>
</ul></li> </ul></li>
...@@ -57,7 +57,7 @@ class RadioSelectTest(WidgetTest): ...@@ -57,7 +57,7 @@ class RadioSelectTest(WidgetTest):
html = """ html = """
<ul id="foo"> <ul id="foo">
<li> <li>
<label for="foo_0"><input checked="checked" type="radio" id="foo_0" value="J" name="beatle" /> John</label> <label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle" /> John</label>
</li> </li>
<li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li> <li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li>
<li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li> <li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li>
...@@ -74,7 +74,7 @@ class RadioSelectTest(WidgetTest): ...@@ -74,7 +74,7 @@ class RadioSelectTest(WidgetTest):
html = """ html = """
<ul id="bar"> <ul id="bar">
<li> <li>
<label for="bar_0"><input checked="checked" type="radio" id="bar_0" value="J" name="beatle" /> John</label> <label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label>
</li> </li>
<li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li> <li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li>
<li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li> <li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment