diff --git a/django/newforms/forms.py b/django/newforms/forms.py index 95d81062f0..201cce3868 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -99,7 +99,8 @@ class BaseForm(StrAndUnicode): else: if errors_on_separate_row and bf_errors: output.append(error_row % bf_errors) - output.append(normal_row % {'errors': bf_errors, 'label': bf.label_tag(escape(bf.label+':')), 'field': bf}) + label = bf.label and bf.label_tag(escape(bf.label + ':')) or '' + output.append(normal_row % {'errors': bf_errors, 'label': label, 'field': bf}) if top_errors: output.insert(0, error_row % top_errors) if hidden_fields: # Insert any hidden fields in the last row. @@ -187,7 +188,10 @@ class BoundField(StrAndUnicode): self.field = field self.name = name self.html_name = form.add_prefix(name) - self.label = self.field.label or pretty_name(name) + if self.field.label is None: + self.label = pretty_name(name) + else: + self.label = self.field.label def __unicode__(self): "Renders this field as an HTML widget." diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index 0290ed3533..f9fd040bd2 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -2080,6 +2080,33 @@ A label can be a Unicode object or a bytestring with special characters. >>> p.as_ul() u'
  • \u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111:
  • \n
  • \u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111:
  • ' +If a label is set to the empty string for a field, that field won't get a label. +>>> class UserRegistration(Form): +... username = CharField(max_length=10, label='') +... password = CharField(widget=PasswordInput) +>>> p = UserRegistration(auto_id=False) +>>> print p.as_ul() +
  • +
  • Password:
  • +>>> p = UserRegistration(auto_id='id_%s') +>>> print p.as_ul() +
  • +
  • + +If label is None, Django will auto-create the label from the field name. This +is default behavior. +>>> class UserRegistration(Form): +... username = CharField(max_length=10, label=None) +... password = CharField(widget=PasswordInput) +>>> p = UserRegistration(auto_id=False) +>>> print p.as_ul() +
  • Username:
  • +
  • Password:
  • +>>> p = UserRegistration(auto_id='id_%s') +>>> print p.as_ul() +
  • +
  • + # Forms with prefixes ######################################################### Sometimes it's necessary to have multiple forms display on the same HTML page,