1

我正在尝试使用 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 渲染?

4

1 回答 1

1

所渲染的{{ form.field1 }}不是同一个对象form.fields['field1']。它是特殊的 BoundField,它与一些数据绑定并准备渲染。

field1因此,您实际上应该在创建表单时使用...填充表单fieldN,然后ua_fields()将成对的 "'text_name', value of self.__getitem__('fieldX')"压缩在一起

于 2012-04-17T04:23:08.010 回答