Добавьте стилизацию в form.as_div в Django
Я вывожу форму модели в Django, используя {{ form.as_div }}
Выводятся как ожидалось, поскольку я хочу, чтобы каждое поле было обернуто в div.
Теперь я хочу добавить класс к этому автоматически сгенерированному div.
добавление виджетов в файл forms.py добавляет атрибут только к самому полю ввода, а не к div вокруг поля.
Может ли кто-нибудь указать мне правильное направление для добавления атрибутов в div вместо поля ввода?
Спасибо
{{ form.as_div }} не возможно в Django, но вы можете сделать вот так
====== in views.py =========
def DemoView(request):
form = StudentForm()
context = {'form':form}
return render(request,'demo.html',context)
======= в html-файле ========
<h1>Student Form</h1>
<form action="" method="get" >
{% for fm in form %}
<div>
<label>{{fm.label}}</label>
<p>{{fm}} </p>
</div>
{% endfor %}
</form>
======= Выход =========
начиная с django 4.1 вы можете использовать "as_div"!
Мне самому нужна была такая возможность в ранней версии, поэтому я создал себе абстрактный Formclass, содержащий свою версию "as_div", производную от существующих render-функций:
class DivRenderer():
"""
as_div: abstract class
"""
def as_div(self):
"Return this form rendered as HTML <divs>s - according to client-Layout."
return self._html_output(
normal_row='<div class="form-group input" %(html_class_attr)s> %(errors)s%(field)s%(help_text)s %(label)s</div>',
error_row='<div%s</div>',
row_ender='</div>',
help_text_html='<br><span class="helptext">%s</span>',
errors_on_separate_row=False,
)
pass
и чем использовать его просто при определении моих форм, например:
class someThingForm(forms.ModelForm, DivRenderer):
readonly = …
…
и чем просто использовать {{ form.as_div }} в шаблонах
Однако! Функция as_div отличается от функции из 4.1 - поэтому будьте осторожны и не ожидайте такого же поведения!
надеюсь, это поможет
Карл