Domyślna struktura generowana przez metodę django.forms.Form.as_table pozostawia nieco do życzenia. Stąd nieco wygodniejsza i nieinwazyjna wersja w postaci filtra (zastanawiam się, czemu ta wbudowana w Django ma postać metody):
from django.template.loader import render_to_string
@register.filter
def as_table(form):
return render_to_string('form_as_table.html', {'form': form})
Do kompletu przykładowy szablon:
{% for f in form %}
{% if f.errors %}
<tr class="{{ f.name }} errors">
<td colspan="2">
<div class="error">{{ f.errors }}</div>
</td>
</tr>
{% endif %}
<tr class="{{ f.name }} {% if f.errors %}errors{% endif %}">
<th>{{ f.label_tag }}:</th>
<td>
{% if f.help_text %}
<span>{{ f.help_text }}</span>
{% endif %}
{{ f }}
</td>
</tr>
{% endfor %}


by Jachu
21 sie 2009 at 16:58
Standardowo as_table jest metodą dlatego, że wszystkie sposoby na proste wyświetlanie forma są jego metodami. To natomiast jest wymagane, by {{ form }} wyświetlało zawartość forma — gdzieś w definicji jest zaszyte, że form.__str__ to wywołanie as_table.
by Marek
22 sie 2009 at 10:06
tak widze ze sie znowu zacząłęś o django rozpisywać więc mam dla Ciebie quiz:
def jakisview(request):
[blah blah…]
s = {
‘foo’ : ‘barbar’,
‘foo2’ : ‘bee’
‘RefNo.’ : 9320,
}
return render_to_response(„t.html”, s)
Pytanie brzmi — jak w samym templacie dostac sie do wartosci 9320 ?
Inaczej mówiąc jak zmusić django do potraktowania kropki za RefNo jako nazwy klucza zamiast akcji?