Метод as_table
Метод as_table применяется к объекту формы и возвращает строку HTML-кода, представляющую поля формы в виде таблицы. Каждое поле формы отображается в отдельной строке таблицы: в первой ячейке размещается метка поля (label), а во второй - сам элемент ввода. Метод автоматически обрабатывает скрытые поля, добавляя их в конце таблицы, и учитывает ошибки валидации, выделяя соответствующие строки. Данный метод удобен для быстрой вёрстки форм, когда требуется стандартное табличное представление без необходимости ручного написания HTML-шаблонов.
Синтаксис
form.as_table()
Метод не принимает аргументов и возвращает строку с HTML-кодом таблицы.
Пример
Создадим простую форму для регистрации пользователя и выведем её с помощью метода as_table:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(label="Username", max_length=100)
email = forms.EmailField(label="Email")
password = forms.CharField(label="Password", widget=forms.PasswordInput)
# Создаём экземпляр формы
form = RegistrationForm()
# Преобразуем форму в HTML-таблицу
table_html = form.as_table()
print(table_html)
Результат выполнения кода:
'<tr><th><label for="id_username">Username:</label></th>
<td><input type="text" name="username" maxlength="100" required id="id_username"></td></tr>
<tr><th><label for="id_email">Email:</label></th>
<td><input type="email" name="email" required id="id_email"></td></tr>
<tr><th><label for="id_password">Password:</label></th>
<td><input type="password" name="password" required id="id_password"></td></tr>'
Пример
Рассмотрим использование метода as_table с формой, связанной с моделью. Для этого создадим модель пользователя и модель-форму на её основе:
from django.db import models
from django.forms import ModelForm
class User(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
class UserForm(ModelForm):
class Meta:
model = User
fields = ["name", "age", "is_active"]
# Создаём экземпляр формы
form = UserForm()
# Получаем HTML-таблицу
table_html = form.as_table()
print(table_html)
Результат выполнения кода:
'<tr><th><label for="id_name">Name:</label></th>
<td><input type="text" name="name" maxlength="100" required id="id_name"></td></tr>
<tr><th><label for="id_age">Age:</label></th>
<td><input type="number" name="age" required id="id_age"></td></tr>
<tr><th><label for="id_is_active">Is active:</label></th>
<td><input type="checkbox" name="is_active" id="id_is_active" checked></td></tr>'
Пример
Покажем, как метод as_table обрабатывает ошибки валидации. Создадим форму и передадим в неё некорректные данные:
from django import forms
class RegistrationForm(forms.Form):
username = forms.CharField(label="Username", max_length=10)
email = forms.EmailField(label="Email")
# Передаём некорректные данные
data = {"username": "very_long_username", "email": "invalid_email"}
form = RegistrationForm(data)
# Проверяем валидацию
if not form.is_valid():
# Выводим форму с ошибками в виде таблицы
table_html = form.as_table()
print(table_html)
Результат выполнения кода:
'<tr class="error"><th><label for="id_username">Username:</label></th>
<td><ul class="errorlist"><li>Ensure this value has at most 10 characters (it has 19).</li></ul>
<input type="text" name="username" value="very_long_username" maxlength="10" required id="id_username"></td></tr>
<tr class="error"><th><label for="id_email">Email:</label></th>
<td><ul class="errorlist"><li>Enter a valid email address.</li></ul>
<input type="email" name="email" value="invalid_email" required id="id_email"></td></tr>'