Метод as_ul
Метод as_ul применяется к экземпляру класса Form и возвращает строку с HTML-кодом, где каждое поле формы обернуто в тег <li>. Этот метод удобно использовать для быстрого отображения формы в виде маркированного списка. По умолчанию каждый элемент списка содержит метку поля и само поле, а также может включать сообщения об ошибках. Метод автоматически обрабатывает скрытые поля и добавляет необходимые атрибуты для корректного отображения.
Синтаксис
form.as_ul()
Метод вызывается без аргументов и возвращает строку HTML.
Пример
Давайте создадим простую форму для регистрации пользователя и отобразим ее с помощью метода as_ul:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(max_length=100)
email = forms.EmailField()
password = forms.CharField(widget=forms.PasswordInput)
age = forms.IntegerField(required=False)
from django.shortcuts import render
from .forms import RegistrationForm
def register(request):
form = RegistrationForm()
html_output = form.as_ul()
return render(request, 'register.html', {'form': form})
Результат выполнения кода:
"<li><label for=\"id_username\">Username:</label> <input type=\"text\" name=\"username\" maxlength=\"100\" required id=\"id_username\"></li>\n<li><label for=\"id_email\">Email:</label> <input type=\"email\" name=\"email\" required id=\"id_email\"></li>\n<li><label for=\"id_password\">Password:</label> <input type=\"password\" name=\"password\" required id=\"id_password\"></li>\n<li><label for=\"id_age\">Age:</label> <input type=\"number\" name=\"age\" id=\"id_age\"></li>"
Пример
Рассмотрим использование метода as_ul с формой, связанной с данными, и с добавлением ошибок валидации:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=50, label='Имя пользователя')
password = forms.CharField(widget=forms.PasswordInput, label='Пароль')
remember = forms.BooleanField(required=False, label='Запомнить меня')
from django.shortcuts import render
from .forms import LoginForm
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if not form.is_valid():
html_output = form.as_ul()
return render(request, 'login.html', {'form': form})
else:
form = LoginForm()
html_output = form.as_ul()
return render(request, 'login.html', {'form': form})
Результат выполнения кода при наличии ошибок:
"<li><ul class=\"errorlist\"><li>This field is required.</li></ul><label for=\"id_username\">Имя пользователя:</label> <input type=\"text\" name=\"username\" maxlength=\"50\" required id=\"id_username\"></li>\n<li><ul class=\"errorlist\"><li>This field is required.</li></ul><label for=\"id_password\">Пароль:</label> <input type=\"password\" name=\"password\" required id=\"id_password\"></li>\n<li><label for=\"id_remember\">Запомнить меня:</label> <input type=\"checkbox\" name=\"remember\" id=\"id_remember\"></li>"
Пример
Давайте отобразим форму с помощью as_ul в шаблоне Django и добавим к ней дополнительную разметку:
from django import forms
class ProfileForm(forms.Form):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
birth_date = forms.DateField(widget=forms.SelectDateWidget(years=range(1900, 2025)))
bio = forms.CharField(widget=forms.Textarea)
from django.shortcuts import render
from .forms import ProfileForm
def profile_view(request):
form = ProfileForm(initial={
'first_name': 'Иван',
'last_name': 'Петров'
})
return render(request, 'profile.html', {'form': form})
HTML-шаблон, в котором отображается форма:
<form method="post">
{% csrf_token %}
<ul>
{{ form.as_ul }}
</ul>
<button type="submit">Сохранить</button>
</form>
Результат выполнения кода в шаблоне:
"<form method=\"post\">\n\t<ul>\n\t\t<li><label for=\"id_first_name\">First name:</label> <input type=\"text\" name=\"first_name\" value=\"Иван\" maxlength=\"30\" required id=\"id_first_name\"></li>\n\t\t<li><label for=\"id_last_name\">Last name:</label> <input type=\"text\" name=\"last_name\" value=\"Петров\" maxlength=\"30\" required id=\"id_last_name\"></li>\n\t\t<li><label for=\"id_birth_date_month\">Birth date:</label> <select name=\"birth_date_month\" id=\"id_birth_date_month\">...</select></li>\n\t\t<li><label for=\"id_bio\">Bio:</label> <textarea name=\"bio\" cols=\"40\" rows=\"10\" required id=\"id_bio\">\n</textarea></li>\n\t</ul>\n\t<button type=\"submit\">Сохранить</button>\n</form>"
Смотрите также
-
метод
as_p,
который рендерит поля формы в тегах абзацев -
метод
as_table,
который рендерит поля формы в виде HTML-таблицы -
метод
as_div,
который рендерит поля формы в тегах контейнеров -
метод
hidden_fields,
который возвращает список скрытых полей формы