我不想使用django的内置表单生成,试图在我的模板中指定每个字段以自定义html输出。
如何迭代一系列表单字段?
如果我的表单如下:
class MyForm(forms.Form):
main_image = forms.ImageField()
second_image = forms.ImageField()
third_image = forms.ImageField()
fourth_image = forms.ImageField()
...
是否可以编写{% for %}
循环以便我可以遍历:
{{ form.main_image }}
{{ form.second_image }}
{{ form.third_image }}
{{ form.fourth_image }}
我尝试了以下似乎合乎逻辑但却没有用的内容:
{% for field in form %}
{{ form.field }}
{% endfor %}
答案 0 :(得分:28)
这显然不起作用:
{% for field in form %}
{{ form.field }}
{% endfor %}
但这会:
{% for field in form %}
{{ field }}
{% endfor %}
答案 1 :(得分:4)
这个应该有效:
{% for field in form %}
{{ field }}
{% endfor %}
在表单中循环字段后,您无法访问form.field
答案 2 :(得分:1)
最好的方法是使用两个循环,一个用于隐藏字段,另一个用于可见字段:
可见参数:
{% for field in form.visible_fields %}
{{ field.label }}
{{ field }}
{% endfor %}
hiddens:
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
通过这种方式,您可以更好地控制UI元素。
答案 3 :(得分:0)
对于希望自定义Django表单的任何前端开发人员,您可以使用名为django-widget-tweaks
的包来分别渲染字段。下面的示例代码:
{# Your template with the form #}
{% extends "base.html" %}
{% load widget_tweaks %}
<form action="" method="POST">
{% csrf_token %}
{% for field in form %}
<label for="{{ field.id_for_label }}">
{{ field.label }}{% if field.field.required %}*{% endif %}
</label>
{% render_field field %}
{% endfor %}
<button type="button">
Submit Form
</button>
</form>
注意:您当然想让它看起来更好,并且如果有任何错误,您可能想遍历表单错误。
They have some very useful examples也在其PyPi页面上。