如何在视图中渲染django表单?

时间:2009-08-16 22:54:51

标签: django django-forms

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))

当我将custom_fields变量提供给模板时,我得到的只是:

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

如何正确呈现表单?


这就是我最终要做的事情:

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))

所以我可以在一个表格中一起显示所有表单字段。

3 个答案:

答案 0 :(得分:9)

我只想出了这个。它是form[field]而不是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>

所以form.fields是所有未绑定字段的列表,form.__getitem__是可调用的,返回绑定字段。

答案 1 :(得分:4)

作为explained here,表单实例具有一些预定义的呈现方法,例如as_tableas_ulas_p,您可以在模板中使用这些方法。

as_table似乎可以满足您的需求,但如果没有,您可以轻松地将自定义渲染方法添加到您自己的表单类中。看看django.forms.forms.BaseForm类是个好主意。

答案 2 :(得分:0)

您是否将字段列表单独传递给模板?这些字段必须是从forms.Form派生的对象的一部分,以便模板正确呈现它。

鉴于您已接到myform.fields.get()的电话,您似乎拥有一个Form对象;你究竟想用这个字段列表做什么?