Виджет URLInput
Виджет URLInput применяется для создания HTML-поля ввода URL-адресов в формах Django. По умолчанию он использует HTML-атрибут type="url", что позволяет браузеру проводить базовую валидацию формата введенного адреса. Виджет автоматически наследуется от TextInput и добавляет специфические атрибуты для работы с URL-адресами.
При использовании URLInput в форме, Django автоматически применяет валидатор URLValidator для проверки корректности введенного URL. Это гарантирует, что пользователь введет валидный адрес, соответствующий стандартам URL-спецификации.
Синтаксис
from django import forms
from django.forms.widgets import URLInput
class MyForm(forms.Form):
url_field = forms.URLField(widget=URLInput(attrs={
'placeholder': 'https://example.com',
'class': 'form-control'
}))
Пример . Использование в форме
Давайте создадим форму для ввода веб-сайта пользователя:
from django import forms
from django.forms.widgets import URLInput
class UserWebsiteForm(forms.Form):
name = forms.CharField(max_length=100)
website = forms.URLField(
widget=URLInput(attrs={
'placeholder': 'Enter your website URL',
'class': 'url-input',
'size': 50
})
)
Результат отображения виджета в HTML:
<input type="url" name="website" placeholder="Enter your website URL" class="url-input" size="50" required id="id_website">
Пример . Обработка данных формы
Рассмотрим полный пример обработки формы с виджетом URLInput:
from django import forms
from django.forms.widgets import URLInput
class WebsiteForm(forms.Form):
site_name = forms.CharField(max_length=100)
site_url = forms.URLField(widget=URLInput(attrs={'class': 'url-field'}))
# В view-функции
def process_form(request):
if request.method == 'POST':
form = WebsiteForm(request.POST)
if form.is_valid():
site_name = form.cleaned_data['site_name']
site_url = form.cleaned_data['site_url']
print(f"Site name: {site_name}, URL: {site_url}")
Результат валидации корректного URL:
"Site name: My Blog, URL: https://myblog.com"
Пример . С атрибутом readonly
Виджет позволяет добавлять атрибут readonly для запрета редактирования поля:
from django import forms
from django.forms.widgets import URLInput
class ReadonlyURLForm(forms.Form):
profile_url = forms.URLField(
widget=URLInput(attrs={
'readonly': 'readonly',
'value': 'https://profile.example.com'
})
)
Результат отображения виджета в HTML:
<input type="url" name="profile_url" value="https://profile.example.com" readonly required id="id_profile_url">
Смотрите также
-
виджет
TextInput,
базовый виджет для ввода текста -
виджет
EmailInput,
виджет для ввода email-адресов -
поле
URLField,
поле формы для URL-адресов -
валидатор
URLValidator,
валидатор для проверки URL-адресов