mirror of
https://github.com/django/django.git
synced 2024-12-23 09:36:06 +00:00
Fixed #17888 -- no longer silence exceptions inside of check_test. Thanks to brutasse for the patch.
This commit is contained in:
parent
e4ea536774
commit
6a5a12ea3e
@ -507,11 +507,7 @@ class CheckboxInput(Widget):
|
||||
|
||||
def render(self, name, value, attrs=None):
|
||||
final_attrs = self.build_attrs(attrs, type='checkbox', name=name)
|
||||
try:
|
||||
result = self.check_test(value)
|
||||
except: # Silently catch exceptions
|
||||
result = False
|
||||
if result:
|
||||
if self.check_test(value):
|
||||
final_attrs['checked'] = 'checked'
|
||||
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.
|
||||
@ -525,7 +521,7 @@ class CheckboxInput(Widget):
|
||||
return False
|
||||
value = data.get(name)
|
||||
# Translate true and false strings to boolean values.
|
||||
values = {'true': True, 'false': False}
|
||||
values = {'true': True, 'false': False}
|
||||
if isinstance(value, six.string_types):
|
||||
value = values.get(value.lower(), value)
|
||||
return value
|
||||
|
@ -310,6 +310,10 @@ commonly used groups of widgets:
|
||||
A callable that takes the value of the CheckBoxInput and returns
|
||||
``True`` if the checkbox should be checked for that value.
|
||||
|
||||
.. versionchanged:: 1.5
|
||||
Exceptions from ``check_test`` used to be silenced by its caller,
|
||||
this is no longer the case, they will propagate upwards.
|
||||
|
||||
``Select``
|
||||
~~~~~~~~~~
|
||||
|
||||
|
@ -216,13 +216,9 @@ class FormsWidgetTestCase(TestCase):
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello there'), '<input checked="checked" type="checkbox" name="greeting" value="hello there" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello & goodbye'), '<input checked="checked" type="checkbox" name="greeting" value="hello & goodbye" />')
|
||||
|
||||
# A subtlety: If the 'check_test' argument cannot handle a value and raises any
|
||||
# exception during its __call__, then the exception will be swallowed and the box
|
||||
# will not be checked. In this example, the 'check_test' assumes the value has a
|
||||
# startswith() method, which fails for the values True, False and None.
|
||||
self.assertHTMLEqual(w.render('greeting', True), '<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', False), '<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', None), '<input type="checkbox" name="greeting" />')
|
||||
# Ticket #17888: calling check_test shouldn't swallow exceptions
|
||||
with self.assertRaises(AttributeError):
|
||||
w.render('greeting', True)
|
||||
|
||||
# The CheckboxInput widget will return False if the key is not found in the data
|
||||
# dictionary (because HTML form submission doesn't send any result for unchecked
|
||||
|
Loading…
Reference in New Issue
Block a user