我是第一次使用 Django Userena。因此无法自定义更改密码表单的外观,因为我们知道 userena 使用 django.contrib.auth.forms< 中的默认更改密码表单(如果我没记错的话)。现在自定义change password form template的外观变得越来越困难,因为在change password模板中,每个并且每个字段都呈现为 {{ form.as_p }} 那样
<form action = "" method="post" role = "form">
<fieldset>
<legend>{% trans "Change Password" %}</legend>
{% csrf_token %}
{{ form.as_p }}
</fieldset>
<input type="submit" value="{% trans "Change password" %}" class="btn btn-success" />
</form>
提到,我已经能够格式化 userena 提供的其他表单的外观。例如,我通过添加 css 更改了 Edit Profile form 的外观> forms.py 中的类
class EditProfileForm(forms.ModelForm):
""" Base form used for fields that are always required """
first_name = forms.CharField(label=_(u'First name'),
max_length=30,
widget=forms.TextInput(attrs={'class' : 'form-control'}),
required=False)
last_name = forms.CharField(label=_(u'Last name'),
max_length=30,
widget=forms.TextInput(attrs={'class' : 'form-control'}),
required=False)
background = forms.CharField(label=(u'Background'),
max_length=500,
widget=forms.Textarea(attrs={'class' : 'form-control'}),
required=True)
并且有效,change password form 已从 django.contrib.auth.forms 呈现,所以我不知道如何在中添加 css 类该文件的每个字段,因为它是 Django 的核心文件。可能有其他方法可以做到这一点,但我对 Django 和 Django userena 缺乏经验,我不知道该怎么做。
请您参考如下方法:
来不及了,但对于新访客来说, 您可以在 forms.py 中创建一个新表单作为
# forms.py
from django.contrib.auth.forms import PasswordChangeForm
...
class MyPasswordChangeForm(PasswordChangeForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["old_password"].widget = forms.PasswordInput(attrs={"class": "form-control"})
self.fields["new_password1"].widget = forms.PasswordInput(attrs={"class": "form-control"})
self.fields["new_password2"].widget = forms.PasswordInput(attrs={"class": "form-control"})
# other customization
并且在您的 views.py 中,您可以将 PasswordChangeView 与您的表单一起使用
# views.py
...
from django.contrib.auth.views import PasswordChangeView
from .forms import MyPasswordChangeForm
...
class ChangePasswordView(PasswordChangeView):
form_class = MyPasswordChangeForm
template_name = "path/to/your/template.html"
就这些。
