diff -r caa143c799a7 -r 2dc2c65c5f76 app/soc/views/helper/templatetags/forms_helpers.py --- a/app/soc/views/helper/templatetags/forms_helpers.py Sun Dec 14 00:33:41 2008 +0000 +++ b/app/soc/views/helper/templatetags/forms_helpers.py Sun Dec 14 00:33:59 2008 +0000 @@ -20,10 +20,15 @@ __authors__ = [ '"Todd Larsen" ', '"Pawel Solyga" ', + '"Sverre Rabbelier" ', ] from django import template +from django.forms import forms as forms_in +from django.utils import encoding +from django.utils.encoding import force_unicode +from django.utils.html import escape register = template.Library() @@ -97,3 +102,81 @@ """ return {'field_label': field_label, 'field_value': field_value} + + +@register.inclusion_tag('soc/templatetags/_as_table.html') +def as_table(form): + """Outputs a form as a properly formatted html table + + Args: + form: the form that should be converted to a table + """ + + fields = [] + hidden_fields = [] + hidden_fields_errors = [] + + # Iterate over all fields and prepare it for adding + for name, field in form.fields.items(): + bf = forms_in.BoundField(form, field, name) + + # If the field is hidden we display it elsewhere + if not bf.is_hidden: + example_text = '' + if hasattr(field, 'example_text'): + example_text = force_unicode(field.example_text) + + item = (bf, field.required, example_text) + fields.append(item) + else: + hidden_fields.append(unicode(bf)) + + for e in bf.errors: + item = (name, force_unicode(e)) + hidden_fields_errors.append(item) + + return { + 'top_errors': form.non_field_errors() or '', + 'hidden_field_errors': hidden_fields_errors or '', + 'form': form, + 'fields': fields or '', + 'hidden_fields': hidden_fields or '', + } + + +@register.inclusion_tag('soc/templatetags/_as_table_row.html') +def as_table_row(form, field, required, example_text): + """Outputs a field as a properly formatted html row + + Args: + form: the form that the row belongs to + field: the field that should be converted to a row + required: whether the field is required + example_text: the example_text for this row + """ + + # Escape and cache in local variable. + errors = [force_unicode(escape(error)) for error in field.errors] + + if field.label: + label = escape(force_unicode(field.label)) + + # Only add the suffix if the label does not end in punctuation. + if form.label_suffix and (label[-1] not in ':?.!'): + label += form.label_suffix + + label = field.label_tag(label) or '' + + field_class_type = 'formfield%slabel' % ('error' if errors else '') + + help_text = field.help_text + + return { + 'help_text': force_unicode(help_text) if help_text else '', + 'field_class_type': field_class_type, + 'label': force_unicode(label) if field.label else '', + 'field': unicode(field), + 'required': required, + 'example_text': example_text, + 'errors': errors, + }