Skip to main content
 首页 » 编程设计

python之如何自定义Django-Userena修改密码表单的外观

2025年05月04日32hnrainll

我是第一次使用 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" 

就这些。