【问题标题】:Rendering a variable number of text-field/input pairs with django templates使用 django 模板呈现可变数量的文本字段/输入对
【发布时间】: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:已添加。谢谢!

标签: django django-templates


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 2019-02-23
    • 2021-08-17
    • 2021-09-24
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多