Виджет URLInput

Виджет URLInput применяется для создания HTML-поля ввода URL-адресов в формах Django. По умолчанию он использует HTML-атрибут type="url", что позволяет браузеру проводить базовую валидацию формата введенного адреса. Виджет автоматически наследуется от TextInput и добавляет специфические атрибуты для работы с URL-адресами.

При использовании URLInput в форме, Django автоматически применяет валидатор URLValidator для проверки корректности введенного URL. Это гарантирует, что пользователь введет валидный адрес, соответствующий стандартам URL-спецификации.

Синтаксис

pythonfrom 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'
  }))

Пример . Использование в форме

Давайте создадим форму для ввода веб-сайта пользователя:

pythonfrom 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:

html<input type="url" name="website" placeholder="Enter your website URL" class="url-input" size="50" required id="id_website">

Пример . Обработка данных формы

Рассмотрим полный пример обработки формы с виджетом URLInput:

pythonfrom 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:

python"Site name: My Blog, URL: https://myblog.com"

Пример . С атрибутом readonly

Виджет позволяет добавлять атрибут readonly для запрета редактирования поля:

pythonfrom 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:

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-адресов