django:form.fields不迭代实例字段

时间:2009-03-22 08:42:21

标签: django forms templates django-templates

我正在尝试遍历模板中的form.fields以及:

{% for field in form.fields %}
   {{ field }}, 
{% endfor %}

我得到一个字段名称列表(“name,description ...”),而不是使用以下内容时呈现的html代码:

{{ form.name }}, {{ form.description }}

(在这种情况下的输出是:

< input id =“id_name”type =“text”name =“name”maxlength =“200”/>< input id =“id_description”....

任何提示? 谢谢!

3 个答案:

答案 0 :(得分:10)

你想迭代“形式”,而不是“form.fields”。后者返回Field实例,前者返回BoundField实例(即使在未绑定的表单的情况下),它们将呈现其小部件HTML。

form.visible_fields和form.hidden_​​fields是仅获取表单的可见/隐藏字段的实用程序方法,但它们也返回BoundField实例。它们与form.fields没有任何平行(我同意这不是最清晰的API)。

答案 1 :(得分:2)

迭代“form”而不是“form.fields”解决了这个问题。 不确定为什么文档还提供了例如:

{% for field in form.visible_fields %}
...

也导致空集。与我的表格没有约束的事实有关?不确定......

答案 2 :(得分:0)

您获得的字段是django.forms.Field实例。要从中获取html视图,您可以使用小部件功能。 {{field.widget}}