使用 django 模板呈现可变数量的文本字段/输入对
Posted
技术标签:
【中文标题】使用 django 模板呈现可变数量的文本字段/输入对【英文标题】:Rendering a variable number of text-field/input pairs with django templates 【发布时间】:2012-04-28 04:21:46 【问题描述】:我正在尝试使用 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 呈现?
【问题讨论】:
请说明您如何定义ua_fields
和ua_field1
。
@DanielRoseman:已添加。谢谢!
【参考方案1】:
form.field1
渲染的对象与form.fields['field1']
不同。它是特殊的 BoundField,它与一些数据绑定并准备渲染。
因此,您实际上应该在创建表单时使用field1
... fieldN
填充表单,然后在ua_fields()
中将成对的“'text_name',self.__getitem__('fieldX')
的值”压缩在一起
【讨论】:
以上是关于使用 django 模板呈现可变数量的文本字段/输入对的主要内容,如果未能解决你的问题,请参考以下文章