Fixed #20805 -- Removed an extra colon beside checkboxes in the admin.
Thanks CollinAnderson for the report.
This commit is contained in:
parent
2a979d2a7b
commit
8676318d2d
|
@ -125,14 +125,16 @@ class AdminField(object):
|
||||||
contents = conditional_escape(force_text(self.field.label))
|
contents = conditional_escape(force_text(self.field.label))
|
||||||
if self.is_checkbox:
|
if self.is_checkbox:
|
||||||
classes.append('vCheckboxLabel')
|
classes.append('vCheckboxLabel')
|
||||||
else:
|
|
||||||
contents += ':'
|
|
||||||
if self.field.field.required:
|
if self.field.field.required:
|
||||||
classes.append('required')
|
classes.append('required')
|
||||||
if not self.is_first:
|
if not self.is_first:
|
||||||
classes.append('inline')
|
classes.append('inline')
|
||||||
attrs = {'class': ' '.join(classes)} if classes else {}
|
attrs = {'class': ' '.join(classes)} if classes else {}
|
||||||
return self.field.label_tag(contents=mark_safe(contents), attrs=attrs)
|
# checkboxes should not have a label suffix as the checkbox appears
|
||||||
|
# to the left of the label.
|
||||||
|
return self.field.label_tag(contents=mark_safe(contents), attrs=attrs,
|
||||||
|
label_suffix='' if self.is_checkbox else None)
|
||||||
|
|
||||||
def errors(self):
|
def errors(self):
|
||||||
return mark_safe(self.field.errors.as_ul())
|
return mark_safe(self.field.errors.as_ul())
|
||||||
|
|
|
@ -509,20 +509,23 @@ class BoundField(object):
|
||||||
)
|
)
|
||||||
return self.field.prepare_value(data)
|
return self.field.prepare_value(data)
|
||||||
|
|
||||||
def label_tag(self, contents=None, attrs=None):
|
def label_tag(self, contents=None, attrs=None, label_suffix=None):
|
||||||
"""
|
"""
|
||||||
Wraps the given contents in a <label>, if the field has an ID attribute.
|
Wraps the given contents in a <label>, if the field has an ID attribute.
|
||||||
contents should be 'mark_safe'd to avoid HTML escaping. If contents
|
contents should be 'mark_safe'd to avoid HTML escaping. If contents
|
||||||
aren't given, uses the field's HTML-escaped label.
|
aren't given, uses the field's HTML-escaped label.
|
||||||
|
|
||||||
If attrs are given, they're used as HTML attributes on the <label> tag.
|
If attrs are given, they're used as HTML attributes on the <label> tag.
|
||||||
|
|
||||||
|
label_suffix allows overriding the form's label_suffix.
|
||||||
"""
|
"""
|
||||||
contents = contents or self.label
|
contents = contents or self.label
|
||||||
# Only add the suffix if the label does not end in punctuation.
|
# Only add the suffix if the label does not end in punctuation.
|
||||||
# Translators: If found as last label character, these punctuation
|
# Translators: If found as last label character, these punctuation
|
||||||
# characters will prevent the default label_suffix to be appended to the label
|
# characters will prevent the default label_suffix to be appended to the label
|
||||||
if self.form.label_suffix and contents and contents[-1] not in _(':?.!'):
|
label_suffix = label_suffix if label_suffix is not None else self.form.label_suffix
|
||||||
contents = format_html('{0}{1}', contents, self.form.label_suffix)
|
if label_suffix and contents and contents[-1] not in _(':?.!'):
|
||||||
|
contents = format_html('{0}{1}', contents, label_suffix)
|
||||||
widget = self.field.widget
|
widget = self.field.widget
|
||||||
id_ = widget.attrs.get('id') or self.auto_id
|
id_ = widget.attrs.get('id') or self.auto_id
|
||||||
if id_:
|
if id_:
|
||||||
|
|
|
@ -527,6 +527,11 @@ Note that the label suffix is added only if the last character of the
|
||||||
label isn't a punctuation character (in English, those are ``.``, ``!``, ``?``
|
label isn't a punctuation character (in English, those are ``.``, ``!``, ``?``
|
||||||
or ``:``).
|
or ``:``).
|
||||||
|
|
||||||
|
.. versionadded:: 1.6
|
||||||
|
|
||||||
|
You can also customize the ``label_suffix`` on a per-field basis using the
|
||||||
|
``label_suffix`` parameter to :meth:`~django.forms.BoundField.label_tag`.
|
||||||
|
|
||||||
Notes on field ordering
|
Notes on field ordering
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -653,7 +658,7 @@ when printed::
|
||||||
>>> str(f['subject'].errors)
|
>>> str(f['subject'].errors)
|
||||||
''
|
''
|
||||||
|
|
||||||
.. method:: BoundField.label_tag(contents=None, attrs=None)
|
.. method:: BoundField.label_tag(contents=None, attrs=None, label_suffix=None)
|
||||||
|
|
||||||
To separately render the label tag of a form field, you can call its
|
To separately render the label tag of a form field, you can call its
|
||||||
``label_tag`` method::
|
``label_tag`` method::
|
||||||
|
@ -671,6 +676,14 @@ additional attributes for the ``<label>`` tag.
|
||||||
The label now includes the form's :attr:`~django.forms.Form.label_suffix`
|
The label now includes the form's :attr:`~django.forms.Form.label_suffix`
|
||||||
(a colon, by default).
|
(a colon, by default).
|
||||||
|
|
||||||
|
.. versionadded:: 1.6
|
||||||
|
|
||||||
|
The optional ``label_suffix`` parameter allows you to override the form's
|
||||||
|
:attr:`~django.forms.Form.label_suffix`. For example, you can use an empty
|
||||||
|
string to hide the label on selected fields. If you need to do this in a
|
||||||
|
template, you could write a custom filter to allow passing parameters to
|
||||||
|
``label_tag``.
|
||||||
|
|
||||||
.. method:: BoundField.css_classes()
|
.. method:: BoundField.css_classes()
|
||||||
|
|
||||||
When you use Django's rendering shortcuts, CSS classes are used to
|
When you use Django's rendering shortcuts, CSS classes are used to
|
||||||
|
|
|
@ -664,7 +664,9 @@ will render something like:
|
||||||
<label for="id_my_field">My Field:</label> <input id="id_my_field" type="text" name="my_field" />
|
<label for="id_my_field">My Field:</label> <input id="id_my_field" type="text" name="my_field" />
|
||||||
|
|
||||||
If you want to keep the current behavior of rendering ``label_tag`` without
|
If you want to keep the current behavior of rendering ``label_tag`` without
|
||||||
the ``label_suffix``, instantiate the form ``label_suffix=''``.
|
the ``label_suffix``, instantiate the form ``label_suffix=''``. You can also
|
||||||
|
customize the ``label_suffix`` on a per-field basis using the new
|
||||||
|
``label_suffix`` parameter on :meth:`~django.forms.BoundField.label_tag`.
|
||||||
|
|
||||||
Admin views ``_changelist_filters`` GET parameter
|
Admin views ``_changelist_filters`` GET parameter
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
|
@ -301,7 +301,7 @@ class UtilTests(SimpleTestCase):
|
||||||
self.assertHTMLEqual(helpers.AdminField(form, 'text', is_first=False).label_tag(),
|
self.assertHTMLEqual(helpers.AdminField(form, 'text', is_first=False).label_tag(),
|
||||||
'<label for="id_text" class="required inline"><i>text</i>:</label>')
|
'<label for="id_text" class="required inline"><i>text</i>:</label>')
|
||||||
self.assertHTMLEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
|
self.assertHTMLEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
|
||||||
'<label for="id_cb" class="vCheckboxLabel required inline"><i>cb</i>:</label>')
|
'<label for="id_cb" class="vCheckboxLabel required inline"><i>cb</i></label>')
|
||||||
|
|
||||||
# normal strings needs to be escaped
|
# normal strings needs to be escaped
|
||||||
class MyForm(forms.Form):
|
class MyForm(forms.Form):
|
||||||
|
@ -312,7 +312,7 @@ class UtilTests(SimpleTestCase):
|
||||||
self.assertHTMLEqual(helpers.AdminField(form, 'text', is_first=False).label_tag(),
|
self.assertHTMLEqual(helpers.AdminField(form, 'text', is_first=False).label_tag(),
|
||||||
'<label for="id_text" class="required inline">&text:</label>')
|
'<label for="id_text" class="required inline">&text:</label>')
|
||||||
self.assertHTMLEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
|
self.assertHTMLEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
|
||||||
'<label for="id_cb" class="vCheckboxLabel required inline">&cb:</label>')
|
'<label for="id_cb" class="vCheckboxLabel required inline">&cb</label>')
|
||||||
|
|
||||||
def test_flatten_fieldsets(self):
|
def test_flatten_fieldsets(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -1870,3 +1870,13 @@ class FormsTestCase(TestCase):
|
||||||
boundfield = SomeForm()['field']
|
boundfield = SomeForm()['field']
|
||||||
|
|
||||||
self.assertHTMLEqual(boundfield.label_tag(), '<label for="id_field"></label>')
|
self.assertHTMLEqual(boundfield.label_tag(), '<label for="id_field"></label>')
|
||||||
|
|
||||||
|
def test_label_tag_override(self):
|
||||||
|
"""
|
||||||
|
BoundField label_suffix (if provided) overrides Form label_suffix
|
||||||
|
"""
|
||||||
|
class SomeForm(Form):
|
||||||
|
field = CharField()
|
||||||
|
boundfield = SomeForm(label_suffix='!')['field']
|
||||||
|
|
||||||
|
self.assertHTMLEqual(boundfield.label_tag(label_suffix='$'), '<label for="id_field">Field$</label>')
|
||||||
|
|
Loading…
Reference in New Issue