РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
437 of 818 menu

Виджет TextInput

Виджет TextInput применяется к полям форм Django и генерирует HTML-элемент <input type="text"> для ввода текстовых данных. Виджет наследуется от базового класса Widget и предоставляет стандартные атрибуты для настройки внешнего вида и поведения поля ввода. Основные параметры включают атрибуты attrs для задания HTML-атрибутов, input_type для указания типа поля и методы для рендеринга виджета в HTML-код.

Синтаксис

from django import forms class MyForm(forms.Form): field_name = forms.CharField( widget=forms.TextInput(attrs={'class': 'my-class', 'placeholder': 'Введите текст'}) )

Пример . С использованием атрибутов

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

from django import forms class UserForm(forms.Form): username = forms.CharField( label="Имя пользователя", max_length=50, widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Введите имя пользователя', 'id': 'username-field', 'required': 'true' }) )

Результат рендеринга виджета в HTML:

<input type="text" name="username" class="form-control" placeholder="Введите имя пользователя" id="username-field" required="true" maxlength="50">

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

Давайте создадим полноценный пример с обработкой данных из поля ввода в представлении:

from django import forms from django.shortcuts import render from django.http import HttpResponse class ContactForm(forms.Form): email = forms.EmailField( label="Email", widget=forms.TextInput(attrs={ 'class': 'email-input', 'placeholder': 'example@mail.com' }) ) subject = forms.CharField( label="Тема", widget=forms.TextInput(attrs={ 'class': 'subject-input', 'placeholder': 'Введите тему сообщения' }) ) def contact_view(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): email = form.cleaned_data['email'] subject = form.cleaned_data['subject'] return HttpResponse(f"Получено сообщение от {email} с темой '{subject}'") else: form = ContactForm() return render(request, 'contact.html', {'form': form})

Результат обработки формы при успешной отправке:

"Получено сообщение от user@example.com с темой 'Привет, Django!'"

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

Давайте создадим форму на основе модели и настроим виджет для поля:

from django.db import models from django import forms class Article(models.Model): title = models.CharField(max_length=200) content = models.TextField() author = models.CharField(max_length=100) def __str__(self): return self.title class ArticleForm(forms.ModelForm): class Meta: model = Article fields = ['title', 'content', 'author'] widgets = { 'title': forms.TextInput(attrs={ 'class': 'title-input', 'placeholder': 'Введите заголовок статьи' }), 'author': forms.TextInput(attrs={ 'class': 'author-input', 'placeholder': 'Введите имя автора' }), } # Использование формы в представлении def create_article(request): if request.method == 'POST': form = ArticleForm(request.POST) if form.is_valid(): article = form.save() return HttpResponse(f"Статья '{article.title}' успешно создана") else: form = ArticleForm() return render(request, 'create_article.html', {'form': form})

Результат создания статьи:

"Статья 'Введение в Django' успешно создана"

Пример . Динамическая настройка виджета

Давайте изменим атрибуты виджета динамически в зависимости от условий:

from django import forms class DynamicForm(forms.Form): search = forms.CharField( label="Поиск", required=False, widget=forms.TextInput(attrs={ 'class': 'search-input', 'type': 'search' }) ) def get_form_with_placeholder(request): form = DynamicForm() # Изменяем атрибуты виджета динамически form.fields['search'].widget.attrs.update({ 'placeholder': 'Поиск по сайту', 'autofocus': 'true' }) return render(request, 'search.html', {'form': form})

Результат рендеринга поля с динамически добавленными атрибутами:

<input type="search" name="search" class="search-input" placeholder="Поиск по сайту" autofocus="true">

Смотрите также

  • виджет Textarea,
    который создает многострочное поле ввода текста
  • виджет PasswordInput,
    который скрывает вводимые символы
  • виджет EmailInput,
    который оптимизирован для ввода email-адресов
  • поле CharField,
    которое использует этот виджет по умолчанию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить