使用 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>

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

是什么阻止了列表查找字段进行神奇的 HTML 呈现?

【问题讨论】:

请说明您如何定义ua_fieldsua_field1 @DanielRoseman:已添加。谢谢! 【参考方案1】:

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

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

【讨论】:

以上是关于使用 django 模板呈现可变数量的文本字段/输入对的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用模板标签拆分文本字段

使用可变数量的参数过滤多个 Django 模型字段

在 Django 模板中渲染 Json 数组

django模板变量从查询集中构建表的字段数

Django:在模板中呈现表单字段时添加 CSS 类

使用模板变量时,Django 模板不呈现 CSS