2009-08-16 14 views
3
for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(myform.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 

Wenn ich geben die custom_fields Variable auf die Vorlage, alles, was ich bin immer ist:Wie rendert man ein Django-Formular in einer Ansicht?

<tr><td><django.forms.widgets.CheckboxInput object at 0x1fa7d90></td></tr> 

Wie kann ich das Formular richtig gemacht zu bekommen?


Das ist, was ich schließlich zu tun:

form1 = CustomForm1() 
form2 = CustomForm2() 
form3 = CustomForm3() 

for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(form1.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form2.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form3.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 

So kann ich alle Felder Formular angezeigt werden zusammen in einer Tabelle.

+4

Warum in aller Welt schreiben Sie HTML in Ihrer Ansicht, und übergeben Sie das dann an die Vorlage? Sie sollten die gesamte HTML-Generierung in der Vorlage vornehmen, dafür ist sie gedacht. –

Antwort

8

Ich habe gerade herausgefunden. Es ist form[field] statt form.fields[field]

>>> f = MyForm() 
>>> f 
<myform.forms.MyForm object at 0x1fa7810> 

>>> f['myfield'] 
<django.forms.forms.BoundField object at 0x20c7e50> 

>>> f.fields['myfield'] 
<django.forms.fields.BooleanField object at 0x1fa7850> 

so form.fields eine Liste aller ungebundenen Felder ist, und form.__getitem__ ist eine aufrufbare, die die gebundenen Felder zurückgibt.

0

Übergeben Sie die Liste der Felder an die Vorlage selbst? Die Felder müssen Teil eines von forms.Form abgeleiteten Objekts sein, damit das Template es korrekt rendern kann.

Vorausgesetzt, Sie haben den Anruf an myform.fields.get() sieht es wie Sie haben ein Formularobjekt; Was genau versuchen Sie mit dieser Liste von Feldern zu tun?

4

Als explained here, Formularinstanzen haben einige vordefinierte Renderingmethoden wie as_table, as_ul, as_p, die Sie in Vorlagen verwenden können.

as_table scheint Ihre Bedürfnisse, aber im Falle zu schneiden nicht, Sie können Ihre benutzerdefinierten Rendering Methoden zu Ihrer eigenen Formularklassen leicht hinzufügen. Ein Blick auf die Klasse django.forms.forms.BaseForm ist an dieser Stelle eine gute Idee.

+3

+1. Django bietet eine Benutzeroberfläche, um Ihre Formulare für Sie zu rendern, also verwenden Sie diese am besten. – anschauung

Verwandte Themen