#29153 closed New feature (wontfix)
Ease customizing the label attrs on a model form field
Reported by: | Christoph | Owned by: | nobody |
---|---|---|---|
Component: | Forms | Version: | 2.0 |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Goal:
Add attributes like "class" to the label tag for inputs.
Problem:
Actually the only thing thats stops me from using {{ form }} is the incapability to change classes for labels easily. So i have to do it like this, for every form and every field:
{{ form.non_field_errors }} <div class="fieldWrapper"> {{ form.subject.errors }} <label for="{{ form.subject.id_for_label }}" class="MY-CUSTOM-CLASS">Email subject:</label> {{ form.subject }} </div>
Where it should be changed:
I would be fine if the label_attrs could be set in BaseForm(), but i think the right place would be class Field
As the label_tag is already set up to give the label class attributes and label_suffix, it is quite easy to add this to the BaseForm _html_output()
class BoundField: def label_tag(self, contents=None, attrs=None, label_suffix=None):
class BaseForm: def _html_output(self, normal_row, error_row, row_ender, help_text_html, errors_on_separate_row): # ... label = bf.label_tag(label) or ''
Change History (4)
comment:1 by , 7 years ago
comment:2 by , 7 years ago
Description: | modified (diff) |
---|
follow-up: 4 comment:3 by , 7 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
Summary: | add label attrs to BaseForm → Ease customizing the label attrs on a model form field |
Thanks for the clarifying edits. I guess you're running into the problem described on Stack Overflow.
I'm not sure if the use case is common enough to add a field attribute for this. Usually I style labels using CSS3 selectors. If you can get consensus on a proposal on the DevelopersMailingList, we can reopen the ticket. Generally, the consensus has been that if you need to make much customization to form rendering, you should iterate over the fields rather than using {{ form }}
.
comment:4 by , 7 years ago
Replying to Tim Graham:
Thanks for the clarifying edits. I guess you're running into the problem described on Stack Overflow.
I'm not sure if the use case is common enough to add a field attribute for this. Usually I style labels using CSS3 selectors. If you can get consensus on a proposal on the DevelopersMailingList, we can reopen the ticket. Generally, the consensus has been that if you need to make much customization to form rendering, you should iterate over the fields rather than using
{{ form }}
.
Thank you Tim, for your response. Yes indeed, thats exactly my problem. As i am using bootstrap 3 it is necessary, to set a "control-label" class to the label. Especially for errors in form validation. It seems to me that in bootstrap 4, the team just gave up, and does not design labels with form errors anymore by default. So i am also gonna change to bootstrap 4, and sadly no label error design. So i think you are right, to not fix this.
Still it makes me wonder that the customizable label_tag is already half implemented.
I don't understand what change you're proposing. Can you provide a patch or describe the changes and the use case?