Form rendering using a template instead of builtin HTML

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from django.utils.html import escape

def makeTemplatedForm(template=None):
    """Create a form class which formats its fields using the provided template.

    The template is given a dictionary containing the following key-value
    pairs:

        "label":        field label, if any,
        "errors":       list of errors, if any,
        "text":         widget rendering for an unbound form / field value for a bound form,
        "help_text":    field help text, if any
    """
    from django.template import loader
    import django.newforms as forms

    class TemplatedForm(forms.BaseForm):
        _template = template
        def __getitem__(self, name):
            "Returns a rendered field with the given name."
            #syslog.syslog("FormattingForm.__getitem__(%s)" % (name, ))
            try:
                field = self.fields[name]
            except KeyError:
                raise KeyError('Key %r not found in Form' % name)
            if not isinstance(field, forms.fields.Field):
                return field
            bf = forms.forms.BoundField(self, field, name)
            errors = [escape(error) for error in bf.errors]
            rendering = loader.render_to_string(self._template, { "errors": errors, "label": bf.label, "text": unicode(bf), "help_text": field.help_text, "field":field })
            return rendering
    return TemplatedForm

More like this

  1. load m2m fields objects by dirol 3 years, 10 months ago
  2. BetterForm with fieldsets and row_attrs by carljm 5 years, 2 months ago
  3. Notifications Middleware for Session-Backed Messages by tclineks 5 years, 8 months ago
  4. NewForms Readonly / Edit Pattern by FreddieP 6 years, 4 months ago
  5. Multiple-Submit-Button Widget for Choice Field by Archatas 5 years, 8 months ago

Comments

(Forgotten your password?)