Я использую Django 1.7 с начальной загрузкой 3 и хочу сделать каждую полевую форму точно так же, лучше всего с использованием полех начальной загрузки имеет ошибки:Django шаблон визуализации каждого поля формы на основе критериев
<div class="form-group {% if form.field.errors %}has-error has-feedback{% endif %}">
<label class="control-label" for="field">{{ form.field.help_text }}</label>
<div class="input-group">
<span class="input-group-addon"><span class="some-icon"></span></span>
{% render_field form.field class+="form-control" placeholder=form.field.label id="end-date" aria-describedby="inputError2Status" %}
</div>
<label class="control-label" for="field">{{ form.field.errors.as_text }}</label>
</div>
Как вы можете см., в тот момент, когда число полей увеличивается, оно становится МНОГО работы, а не только для его написания, но и для его поддержания, а рефакторинг становится чертовски ... на самом деле НЕ СУХОЙ. Для каждого поля мне нужно изменить переменные form.field
и id="field"
, а значок
Как написать функцию, templatetag или что-то еще, чтобы django отображал все поля в моей форме таким образом? Возможно ли это сделать? Было бы замечательно, если в форме в django была бы настройка, чтобы принять необязательный glypycon class
, который рендеринг будет использовать для рендеринга значка.
- РЕДАКТИРОВАТЬ -
Как указано @Serafeim Джанго-хрустящими-форм может быть решением. Но как я могу использовать хрустящие формы для создания вышеуказанного html?
- EDIT 2 -
После прочтения на хрустящих форм мне удалось придумать следующее решение: Мой forms.py файл выглядит следующим образом:
class CreateForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(CreateForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.form_action = 'submit'
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.html5_required = True
self.helper.layout = Layout(
PrependedText('fieldA', '<span class="fa fa-calendar"></span>', placeholder="yyyy-mm-dd"),
PrependedText('fieldB', '<span class="fa fa-clock-o"></span>', placeholder="0:00:00 (h:m:s)"),
'fieldC')
fieldA = forms.DateField(required=True)
fieldB = FDurationField(required=True)
fieldC = forms.CharField(widget=forms.Textarea(attrs={'rows':3}), required=False, max_length=128)
class Meta:
model = AModel
exclude = ('fieldD', 'FieldE', 'fieldF', 'fieldG')
и в мой шаблон мне нужно только позвонить {% crispy form %}
, который намного лучше, чем моя первоначальная версия. Тем не менее, я все еще чувствую, что мне нужно повторить определенные шаги, например добавление полей в макет ... Возможно ли еще еще уменьшить код?
Вы когда-нибудь слышали о джанго-хрустящих формах http://django-crispy-forms.readthedocs.org/en/latest/? Попробуйте, и он решит все ваши проблемы :) – Serafeim
У меня есть, и я пробовал, но я не мог заставить его работать так, как я хотел ... Возможно, я просто не использовал его правильно. .. К сожалению, я не могу показать вам код, который у меня был с хрустящими формами, удалил его некоторое время назад :( – Tim