Метод as_div
Метод as_div применяется к экземпляру формы и возвращает строку
с HTML-разметкой, где каждое поле формы обёрнуто в тег <div>.
Этот метод автоматически добавляет классы 'required' для
обязательных полей, 'error' для полей с ошибками валидации
и вставляет сообщения об ошибках и подсказки. Метод не принимает
никаких аргументов и возвращает объект SafeString.
Синтаксис
form.as_div()
Пример
Давайте создадим простую форму регистрации и отрендерим её с помощью as_div:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(max_length=50, label="Username")
email = forms.EmailField(label="Email address")
age = forms.IntegerField(label="Age")
agree = forms.BooleanField(label="I agree to terms")
form = RegistrationForm()
html_output = form.as_div()
print(html_output)
Результат выполнения кода:
"<div><label for=\"id_username\">Username:</label><input type=\"text\" name=\"username\" maxlength=\"50\" required id=\"id_username\"></div>\n<div><label for=\"id_email\">Email address:</label><input type=\"email\" name=\"email\" required id=\"id_email\"></div>\n<div><label for=\"id_age\">Age:</label><input type=\"number\" name=\"age\" required id=\"id_age\"></div>\n<div><label for=\"id_agree\">I agree to terms:</label><input type=\"checkbox\" name=\"agree\" required id=\"id_agree\"></div>"
Пример
Рассмотрим рендеринг формы с ошибками валидации, чтобы увидеть,
как as_div обрабатывает ошибки и добавляет CSS-классы:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=50)
password = forms.CharField(widget=forms.PasswordInput)
form = LoginForm({
'username': '',
'password': '123'
})
if not form.is_valid():
html_output = form.as_div()
print(html_output)
Результат выполнения кода:
"<div class=\"error\"><label for=\"id_username\">Username:</label><input type=\"text\" name=\"username\" maxlength=\"50\" required id=\"id_username\"><ul class=\"errorlist\"><li>This field is required.</li></ul></div>\n<div><label for=\"id_password\">Password:</label><input type=\"password\" name=\"password\" required id=\"id_password\"></div>"
Пример
Продемонстрируем использование as_div в шаблоне Django
с передачей формы из представления:
from django.shortcuts import render
from .forms import RegistrationForm
def register_view(request):
form = RegistrationForm()
return render(request, 'register.html', {'form': form})
А вот код шаблона 'register.html':
<form method="post">
{% csrf_token %}
{{ form.as_div }}
<button type="submit">Register</button>
</form>
Результат выполнения кода в браузере:
<form method="post">
<div><label for="id_username">Username:</label><input type="text" name="username" maxlength="50" required id="id_username"></div>
<div><label for="id_email">Email address:</label><input type="email" name="email" required id="id_email"></div>
<div><label for="id_age">Age:</label><input type="number" name="age" required id="id_age"></div>
<div><label for="id_agree">I agree to terms:</label><input type="checkbox" name="agree" required id="id_agree"></div>
<button type="submit">Register</button>
</form>