Я создаю свой первый веб-сайт с помощью Django и столкнулся, как мне кажется, с очень странной проблемой. У меня есть форма на странице, и я хочу, чтобы, если пользователь вводит недопустимые данные в одно из ее полей, это поле помечалось определенным стилем CSS. Я написал метод проверки (метод «clean()»), который проверяет вводимые пользователем данные. Если он не проходит проверку, к виджету этого ввода добавляется класс «ошибка». Затем, используя CSS, я придаю этому классу .error особый стиль.
Вот проблема: стиль ошибки неправильно применяется к полям «имя», «фамилия» и «электронная почта» формы. Например, когда вы вводите неверную фамилию, поля «фамилия» и «имя» выделяются красным, а когда вы вводите неверный адрес электронной почты, поля «электронная почта» и «имя» выделяются.
Я просмотрел файл «forms.py» тысячу раз и не могу понять, в чем дело.
Вот код файла "forms.py":
from django import forms
from .models import Appointment
class AppointmentForm(forms.ModelForm):
class Meta:
model = Appointment
fields = ['name', 'last_name', 'email', 'date', 'time']
widgets = {
"name": forms.TextInput(attrs={"class": "form-control"}),
"last_name": forms.TextInput(attrs={"class": "form-control"}),
"email": forms.EmailInput(attrs={"class": "form-control"}),
}
def clean_name(self):
name = self.cleaned_data["name"]
if not name.isalpha():
self.fields['name'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input only letters", code="carac_esp")
return name
def clean_last_name(self):
last_name = self.cleaned_data["last_name"]
if not last_name.isalpha():
self.fields['last_name'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input only letters", code="carac_esp")
return last_name
def clean_email(self):
email = self.cleaned_data["email"]
allowed_domains = ['gmail.com', 'hotmail.com', 'yahoo.com']
if not any(email.endswith(domain) for domain in allowed_domains):
self.fields['email'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input a valid email address", code="email_invalid")
return email
Файл «views.py»:
from django.shortcuts import render
from .forms import TurnoForm
def home(request):
if request.method == "POST":
form = TurnoForm(request.POST)
form.is_valid()
if form.is_valid():
form.save()
return render(request, "home/index2.html", {"form": form})
else:
return render(request, "home/index2.html", {"form": form})
else:
form = TurnoForm()
return render(request, "home/index2.html", {"form": form})
Вот упрощенная версия HTML, показывающая только ту форму, которая вызывает у меня проблемы:
{% load static %}
Agende su turno
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.nombre }}
{{ form.apellido }}
{{ form.email }}
Guardar
И класс ошибок CSS файла «styles2.css», используемый для стилизации недопустимых полей:
.error{
background-color: lightcoral;
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... upon-error
Проблема со стилем поля формы Django при ошибке ⇐ CSS
Разбираемся в CSS
-
Anonymous
1713584295
Anonymous
Я создаю свой первый веб-сайт с помощью Django и столкнулся, как мне кажется, с очень странной проблемой. У меня есть форма на странице, и я хочу, чтобы, если пользователь вводит недопустимые данные в одно из ее полей, это поле помечалось определенным стилем CSS. Я написал метод проверки (метод «clean()»), который проверяет вводимые пользователем данные. Если он не проходит проверку, к виджету этого ввода добавляется класс «ошибка». Затем, используя CSS, я придаю этому классу .error особый стиль.
Вот проблема: стиль ошибки неправильно применяется к полям «имя», «фамилия» и «электронная почта» формы. Например, когда вы вводите неверную фамилию, поля «фамилия» и «имя» выделяются красным, а когда вы вводите неверный адрес электронной почты, поля «электронная почта» и «имя» выделяются.
Я просмотрел файл «forms.py» тысячу раз и не могу понять, в чем дело.
Вот код файла "forms.py":
from django import forms
from .models import Appointment
class AppointmentForm(forms.ModelForm):
class Meta:
model = Appointment
fields = ['name', 'last_name', 'email', 'date', 'time']
widgets = {
"name": forms.TextInput(attrs={"class": "form-control"}),
"last_name": forms.TextInput(attrs={"class": "form-control"}),
"email": forms.EmailInput(attrs={"class": "form-control"}),
}
def clean_name(self):
name = self.cleaned_data["name"]
if not name.isalpha():
self.fields['name'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input only letters", code="carac_esp")
return name
def clean_last_name(self):
last_name = self.cleaned_data["last_name"]
if not last_name.isalpha():
self.fields['last_name'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input only letters", code="carac_esp")
return last_name
def clean_email(self):
email = self.cleaned_data["email"]
allowed_domains = ['gmail.com', 'hotmail.com', 'yahoo.com']
if not any(email.endswith(domain) for domain in allowed_domains):
self.fields['email'].widget.attrs['class'] += ' error'
raise forms.ValidationError("Please, input a valid email address", code="email_invalid")
return email
Файл «views.py»:
from django.shortcuts import render
from .forms import TurnoForm
def home(request):
if request.method == "POST":
form = TurnoForm(request.POST)
form.is_valid()
if form.is_valid():
form.save()
return render(request, "home/index2.html", {"form": form})
else:
return render(request, "home/index2.html", {"form": form})
else:
form = TurnoForm()
return render(request, "home/index2.html", {"form": form})
Вот упрощенная версия HTML, показывающая только ту форму, которая вызывает у меня проблемы:
{% load static %}
Agende su turno
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.nombre }}
{{ form.apellido }}
{{ form.email }}
Guardar
И класс ошибок CSS файла «styles2.css», используемый для стилизации недопустимых полей:
.error{
background-color: lightcoral;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78345205/problem-with-django-form-field-styling-upon-error[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия