Я хочу добавить дополнительную информацию для некоторых полей формы Django и использовать ее в шаблонах для добавления дополнительных HTML-тегов
У меня есть форма Django, такая как:
class MyForm(forms.Form):
integer = forms.IntegerField(
help_text='Please enter your favorite integer number',
label='Favorite integer',
widget=forms.TextInput(attrs={'class':'input-xlarge'}))
decimal = forms.DecimalField(
min_value=Decimal('0.0001'),
decimal_places=4,
help_text='Please enter your favorite decimal number',
label='Favorite decimal',
widget=forms.TextInput(attrs={'class':'input-xlarge'}))
==> here I would like to say: decimal will have a new property
Я отображаю MyForm в шаблоне, используя цикл над каждым полем:
{% for item in form.visible_fields %}
==> here I would like to test if item has that property to add some html tags
{{ item }}
{% endfor %}
Я не могу использовать атрибуты виджета, так как хочу использовать информацию о свойствах вне отображаемого тега ввода.
Должен ли я создать настраиваемое поле , написать собственные средства визуализации для всех полей, которые я использую, или есть более простое решение, которое я пропустил?
Редактировать: пока мое решение: (упрощенная версия)
Основной шаблон:
<form action="/somewhere/" method="post">{% csrf_token %}
{% include 'form_field.html' with item=form.integer icon="icon-home" %}
{% include 'form_field.html' with item=form.decimal icon="icon-list-alt" %}
{% include 'form_field.html' with item=form.another icon="icon-signal" %}
{% include 'form_field.html' with item=form.again icon="icon-time" %}
...
В form_field.html я визуализирую поле, используя Bootstrap от твиттера input-prepend div :
<div class="control-group">
<label class="control-label" for="{{ item.name }}">{{ item.label }}</label>
<div class="controls">
{% if icon %}
<div class="input-prepend">
<span class="add-on"><i class="{{ icon }}"></i></span>
{% endif %}
{{ item }}
<p class="help-block">{{ item.help_text }}</p>
{% if icon %}
</div>
{% endif %}
</div>
</div>
Все, что я хочу, - это упростить основной шаблон, используя цикл, а скорее перечисляя все поля, что подвержено ошибкам. Поэтому я хочу переместить это свойство icon-home из шаблона в определение формы, чтобы все атрибуты были в одном месте (конкретные атрибуты виджета уже находятся в форме).
В идеале в основном шаблоне у меня будет:
{% for item in form.visible_fields %}
{% include 'form_field.html' %}
{% endfor %}
Я понимаю, что это может быть расценено как неправильное понимание принципов Django (внешний вид сайта должен быть в шаблонах, а не в формах) ...