diff --git a/django/newforms/forms.py b/django/newforms/forms.py index 3df7a9e834..9fafd20787 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -122,7 +122,14 @@ class BaseForm(StrAndUnicode): else: if errors_on_separate_row and bf_errors: output.append(error_row % bf_errors) - label = bf.label and bf.label_tag(escape(bf.label + ':')) or '' + if bf.label: + label = escape(bf.label) + # Only add a colon if the label does not end in punctuation. + if label[-1] not in ':?.!': + label += ':' + label = bf.label_tag(label) or '' + else: + label = '' if field.help_text: help_text = help_text_html % field.help_text else: diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index e0d05a2c89..0d3a65277c 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -2601,6 +2601,27 @@ underscores converted to spaces, and the initial letter capitalized.
The first question:
+What is your name?
+The answer to life is:
+Answer this question!
+The last question. Period.
+>>> print Questions().as_p() ++
+
+
+
+ A label can be a Unicode object or a bytestring with special characters. >>> class UserRegistration(Form): ... username = CharField(max_length=10, label='ŠĐĆŽćžšđ')