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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | from django import newforms as forms
from django.newforms.forms import BoundField
from django.template import Context, loader
class TemplatedForm(forms.Form):
'''
template newforms/form.html:
% for field in bound_fields %}
{% include "newforms/field.html" %}
{% endfor %}
template newforms/field.html:
<tr{% if field.errors %} class="errors" {% endif%}>
<th>
<label for="id_{{ field.name }}">{{ field.label }}{% if field.field.required %}<span class="required">*</span>{% endif %}:</label>
</th>
<td>
{{ field }}
{% if field.errors %}{{ field.errors }}{% endif %}
{% if field.help_text %}
<p class="helptext">({{ field.help_text }})</p>
{% endif %}
</td>
</tr>
'''
def output_via_template(self):
"Helper function for fieldsting fields data from form."
bound_fields = [BoundField(self, field, name) for name, field \
in self.fields.items()]
c = Context(dict(form = self, bound_fields = bound_fields))
t = loader.get_template('newforms/form.html')
return t.render(c)
def __str__(self):
return self.output_via_template()
# example usage in view
class PersonalInfoForm(TemplatedForm):
school_or_institution = forms.CharField(max_length=100,required=False)
first_name = forms.CharField(max_length=100,required=False)
last_name = forms.CharField(max_length=100,required=False)
email = forms.EmailField()
personal_website_url = forms.CharField(max_length=100,required=False)
button = forms.CharField(required=False,widget=forms.HiddenInput)
|
Comments