Поле пароля Django не отображается с атрибутами начальной загрузки

#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>
  

Но результат для поля пароля оформлен не так, как для других полей. Отображаемая страница регистрации выглядит так, как показано ниже
отображается register.html страница

Каким может быть исправление для получения следующего вывода ожидаемый результат

Ответ №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 /