【发布时间】:2018-04-05 23:26:07
【问题描述】:
我在尝试更改我的应用程序密码后收到此错误消息。
您知道导致这条路线失败的原因吗?
其实是修改密码,但没有渲染成功模板“password_change_done.html”。
谢谢!
app/urls.py
from django.contrib.auth import views as auth_views
from django.urls import path
from . import views
app_name = 'account'
urlpatterns = [
# path('login/', views.user_login, name='login'),
path('', views.dashboard, name='dashboard'),
# login / logout urls
path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('logout-then-login/', auth_views.logout_then_login, name='logout_then_login'),
# change password urls
path('password-change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
]
错误信息
# NoReverseMatch at /account/password-change/
# Reverse for 'password_change_done' not found. 'password_change_done' is not a valid view function or pattern name.
# Request Method: POST
# Request URL: http://localhost:8000/account/password-change/
# Django Version: 2.0.4
# Exception Type: NoReverseMatch
# Exception Value:
# Reverse for 'password_change_done' not found. 'password_change_done' is not a valid view function or pattern name.
# Exception Location: C:\env\django_social_website\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 632
# Python Executable: C:\env\django_social_website\Scripts\python.exe
# Python Version: 3.6.3
# Python Path:
# ['C:\\Projects\\django_social_website',
# 'C:\\env\\django_social_website\\Scripts\\python36.zip',
# 'C:\\ProgramData\\Anaconda3\\DLLs',
# 'C:\\ProgramData\\Anaconda3\\lib',
# 'C:\\ProgramData\\Anaconda3',
# 'C:\\env\\django_social_website',
# 'C:\\env\\django_social_website\\lib\\site-packages',
# 'C:\\env\\django_social_website\\lib\\site-packages\\setuptools-28.8.0-py3.6.egg',
# 'C:\\env\\django_social_website\\lib\\site-packages\\pip-9.0.1-py3.6.egg']
# Server time: Thu, 5 Apr 2018 21:34:22 +0000
app/templates/registration/password_change_form.html
{% extends "base.html" %}
{% block title %}Change your password{% endblock %}
{% block content %}
<h1>Change your password</h1>
<p>Use the form below to change your password.</p>
<form action="." method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Change"></p>
</form>
{% endblock %}
app/templates/registration/password_change_done.html
{% extends "base.html" %}
{% block title %}Password changed{% endblock %}
{% block content %}
<h1>Password changed</h1>
<p>Your password has been successfully changed.</p>
{% endblock %}
感谢您的帮助!
【问题讨论】:
-
密码修改成功后是否使用重定向?你能显示代码吗?也许错误是必须是 'account:password_change_done' 但没有代码它只是一个猜测。
-
嗨 Tobit,实际上是代码。在“urls.py”文件中,我使用的是“PasswordChangeView”视图,在查看 django 的默认视图后,它有一个默认为 reverse_lazy('password_change_done') 的 success_url 变量。也许我创建的命名空间造成了所有麻烦。在这里,您有函数和指向 Django 的默认身份验证视图的链接:github.com/django/django/blob/master/django/contrib/auth/… 在其中查找类 PasswordChangeView。谢谢
标签: python django authentication django-templates