使用django模板渲染可变数量的文本字段/输入对

时间:2012-04-16 20:05:44

标签: django django-templates

我正在尝试使用django(v 1.3)模板呈现可变数量的字段名称/输入框。在我看来,我查找一个表来获取列名,然后创建一个相同大小的forms.CharFields()列表,并按如下方式将它们压缩在一起:

ua_data = [forms.CharField(required=False) for i in range(len(ua_data_field_names))]
ua_fields = zip(ua_data_field_names, ua_data)
ua_field1 = forms.CharField(required=False) # temp field for testing

所以在它结尾处,上下文包含这样的内容(仅适用于一个字段):

>>> ua_fields
[(u'Test field', <django.forms.fields.CharField object at 0x108386b50>)]

在我的模板中,我正在运行以下循环:

  {% for field in form.ua_fields %}
  <tr>
      <td>{{ field.0 }}</td>
      <td>{{ field.1 }} {{ field.1.errors }}</td>
      {#<td>{{ form.ua_field1 }} {{ form.ua_field1.errors }}</td>#}
  </tr>
  {% endfor %}

在呈现的HTML中喷出以下内容:

Test field  <django.forms.fields.CharField object at 0x1081f1c50>

如果我将上面的第二个<td>与注释掉的行交换,我实际上会得到一个输入字段(ua_field1是一个直接的forms.CharField对象)

什么阻止列表查找字段进行魔术HTML渲染?

1 个答案:

答案 0 :(得分:1)

{{ form.field1 }}呈现的内容与form.fields['field1']不同。它是特殊的BoundField,它与一些数据绑定并准备渲染。

因此,您应该在表单创建时使用field1 ... fieldN填充表单,然后在ua_fields()中将{'text_name'对,self.__getitem__('fieldX')的值组合在一起}“