Добавьте стилизацию в 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>

======= Выход =========

enter image description here

начиная с 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 - поэтому будьте осторожны и не ожидайте такого же поведения!

надеюсь, это поможет

Карл

Вернуться на верх