I've done something similar for auto-generated forms (form_for_model() and form_for_instance()), by derivating a class from BaseForm and providing my own _html_output() method, which emits the label with different attributes depending on its "requiredness" (using the 'attrs' parameter to BoundField.label_tag()). Then pass your derived class to form_for_model() and form_for_instance() using the form named parameter.
The code: class ExtForm(forms.BaseForm): def _html_output(self, normal_row, error_row, row_ender, help_text_html, errors_on_separate_row): "Helper function for outputting HTML. Used by as_table(), as_ul(), as_p()." from django.newforms.forms import BoundField from django.newforms.fields import Field from django.newforms.util import flatatt, ErrorDict, ErrorList, ValidationError from django.utils.html import escape from django.utils.encoding import StrAndUnicode, smart_unicode, force_unicode top_errors = self.non_field_errors() # Errors that should be displayed above all fields. output, hidden_fields = [], [] for name, field in self.fields.items(): bf = BoundField(self, field, name) bf_errors = self.error_class([escape(error) for error in bf.errors]) # Escape and cache in local variable. if bf.is_hidden: if bf_errors: top_errors.extend(['(Hidden field %s) %s' % (name, force_unicode(e)) for e in bf_errors]) hidden_fields.append(unicode(bf)) else: if errors_on_separate_row and bf_errors: output.append(error_row % force_unicode(bf_errors)) if bf.label: label = escape(force_unicode(bf.label)) # Only add the suffix if the label does not end in punctuation. if self.label_suffix: if label[-1] not in ':?.!': label += self.label_suffix if field.required: label = bf.label_tag(label, attrs={'class': 'required'}) or '' else: label = bf.label_tag(label, attrs={'class': 'optional'}) or '' else: label = '' if field.help_text: help_text = help_text_html % force_unicode(field.help_text) else: help_text = u'' output.append(normal_row % {'errors': force_unicode(bf_errors), 'label': force_unicode(label), 'field': unicode(bf), 'help_text': help_text}) if top_errors: output.insert(0, error_row % top_errors) if hidden_fields: # Insert any hidden fields in the last row. str_hidden = u''.join(hidden_fields) if output: last_row = output[-1] # Chop off the trailing row_ender (e.g. '</td></tr>') and insert the hidden fields. output[-1] = last_row[:-len(row_ender)] + str_hidden + row_ender else: # If there aren't any rows in the output, just append the hidden fields. output.append(str_hidden) return u'\n'.join(output) Hope this helps. Cheers, Marco On Oct 22, 8:33 pm, [EMAIL PROTECTED] wrote: > I see what you mean but I dont think it will work because I want the > field elements to look sort of like: > > [Prompt:] [Textbox] [a red '*' initially or a error message after > validation] [help text if any] > > So, in the template, I was hoping to be able do something like: > > <b>{{field.label_tag}}:</b> {{field}} > {% if field.error%} > <font color="red"><b>{{ field.error }}</b></font> > {% else %} > {% if field.required %} <font color="red">*</font>{% endif %} > {% endif %} > {% if field.help_text %}} <font > color="silver">{{ field.help_text }}</font>{% endif %} > > Not sure if I have all the code correct here but you get the idea... > > Thanks to everyone in the Django community! > Carlos :) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---