' STR'对象不能在password_reset,第185行中调用/django/contrib/auth/views.py

时间:2015-10-28 10:01:02

标签: python django

我正在尝试自定义django.contrib.auth.views.password_reset的PasswordResetForm表单。我复制了Django's websiteGitHub中的代码,并将其放入我的forms.py中。我改变了代码:

forms.py

email = forms.EmailField(label=_("Email"), max_length=254)

email = forms.EmailField(label=_("Email"), max_length=254, widget=forms.EmailInput(attrs={'placeholder': 'E-mail'}))

并保留剩余的PasswordResetForm代码。

url.py

url(r'^password/reset/$','django.contrib.auth.views.password_reset', {'post_reset_redirect': '/password/reset/done/', 'password_reset_form': 'forms.PasswordResetForm',}, name="password_reset"),

但是我收到以下错误:

Exception Location: /Library/Python/2.7/site-packages/Django-1.8.3-py2.7.egg/django/contrib/auth/views.py in password_reset, line 185

185. form = password_reset_form() 

我没有这种自定义工作。我需要自定义,因为我想在字段中使用PlaceHolder。如果我删除了网址中的密钥,那就可以了。

1 个答案:

答案 0 :(得分:6)

password_reset_form的值应该是实际的表单类,而不是表单的字符串路径。例如,如果您使用

导入表单
from forms import PasswordResetForm

然后你会这样做:

url(r'^password/reset/$', 'django.contrib.auth.views.password_reset', {'post_reset_redirect': '/password/reset/done/', 'password_reset_form': PasswordResetForm}, name="password_reset"),

另外,在Django 1.8中不推荐使用类似django.contrib.auth.views.password_reset的字符串视图,并且将停止在Django 1.10中工作。相反,您可以导入身份验证视图

from django.contrib.auth import views as auth_views

并将网址格式更改为

url(r'^password/reset/$', auth_views.password_reset, {'post_reset_redirect': '/password/reset/done/', 'password_reset_form': PasswordResetForm}, name="password_reset"),