Ответ 1
Ну, это явно не сработало бы:
{% for field in form %}
{{ form.field }}
{% endfor %}
но это будет:
{% for field in form %}
{{ field }}
{% endfor %}
Я не хочу использовать 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 %}
Ну, это явно не сработало бы:
{% for field in form %}
{{ form.field }}
{% endfor %}
но это будет:
{% for field in form %}
{{ field }}
{% endfor %}
Это должно работать:
{% for field in form %}
{{ field }}
{% endfor %}
Как только вы пройдете через поле в форме, вы не сможете получить доступ к form.field
Лучший способ - использовать две петли, одну для скрытых полей и одну для видимых полей:
видимые объекты:
{% for field in form.visible_fields %}
{{ field.label }}
{{ field }}
{% endfor %}
hiddens:
{% for hidden in form.hidden_fields %}
{{ hidden }}
{% endfor %}
таким образом вы сможете лучше контролировать элементы пользовательского интерфейса.
Любой разработчик внешнего интерфейса, желающий настроить форму 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>
Примечание: Конечно, вы захотите, чтобы это выглядело лучше, и, возможно, вы захотите просмотреть ошибки формы, если они есть.
У них также есть несколько очень полезных примеров на их странице PyPi.