#python #django #django-forms #django-templates
#python #django #django-forms #django-шаблоны
Вопрос:
Я пытался изменить стиль полей моего пароля при регистрации моего приложения учетных записей Django.
'password1': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password','required': 'required'}, ),
'password2': forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Confirm password','required': 'required'}, ),
Мое представление отображается в register.html которое находится в приведенном ниже коде
<div class="col-12 mt-4">
{{ form.password1 }}
</div>
<div class="col-12 mt-4">
{{ form.password2 }}
</div>
Но результат для поля пароля оформлен не так, как для других полей. Отображаемая страница регистрации выглядит так, как показано ниже
Каким может быть исправление для получения следующего вывода
Ответ №1:
После исследования выясняется, что поля регистрации Django по умолчанию, то есть виджеты «username», «password1» и «password2», могут быть изменены в конструкторе, вот рабочий код
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs['class'] = 'form-control'
self.fields['username'].widget.attrs['placeholder'] = 'Username'
self.fields['password1'].widget.attrs['class'] = 'form-control'
self.fields['password1'].widget.attrs['placeholder'] = 'Password'
self.fields['password2'].widget.attrs['class'] = 'form-control'
self.fields['password2'].widget.attrs['placeholder'] = 'Confirm password'
Ответ №2:
Я бы предложил вот так: Пожалуйста, попробуйте это.
Способ 1
password1 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Password','required': 'required'}, ))
password2 = forms.CharField(widget=forms.PasswordInput(attrs={'class': 'form-control', 'placeholder': 'Confirm password','required': 'required'}, ))
Способ 2
Использование конструктора (сокращение кода)
def __init__(self, *args, **kwargs):
super(SignUpForm, self).__init__(*args, **kwargs)
self.fields['username'].widget.attrs = {'class': 'form-control', 'placeholder': 'Password','required': 'required'}
self.fields['password1'].widget.attrs = {'class': 'form-control', 'placeholder': 'Confirm password','required': 'required'}
self.fields['password2'].widget.attrs = {'class': 'form-control', 'placeholder': 'Confirm password','required': 'required'}
Комментарии:
1. Я смог исправить это с помощью конструктора, оказывается, поля по умолчанию из виджетов django, то есть username, password1 и password2, могут быть улучшены в конструкторе.. Вот код
Ответ №3:
Попробуйте использовать crispy_fields или django-crispy-forms. Я столкнулся с такой же проблемой, но после этого я внедрил crispy-forms и решил проблему. https://django-crispy-forms.readthedocs.io/en/latest /