【问题标题】:Django change_password NoReverseMatch at /accounts/password/change/Django change_password NoReverseMatch 在 /accounts/password/change/
【发布时间】:2014-11-29 13:24:26
【问题描述】:

我在 accounts/urls.py 中有以下 url 配置:

url(r'^password/change/$', 'django.contrib.auth.views.password_change',
{'template_name': 'change_password.html'}, name='password_change'),
url(r'^password/change/done/$', 'django.contrib.auth.views.logout_then_login',
name='password_change_done'),

但是,如果我调用密码更改网址,我会得到以下信息

错误:NoReverseMatch at /accounts/password/change/ Reverse for 带有参数“()”和关键字参数“{}”的“password_change_done” 未找到。尝试了 0 个模式:[]

如果用户修改了自己的密码,则需要注销并重新登录。

非常感谢。

编辑,追溯

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/password/change/

Django Version: 1.7
Python Version: 3.4.1
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'widget_tweaks',
 'djangular',
 'djcelery',
 'accounts',
 'system_utils',
 'alert_system',
 'proj',
 'django_cleanup')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/views/decorators/debug.py" in sensitive_post_parameters_wrapper
  76.             return view(request, *args, **kwargs)
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/utils/decorators.py" in _wrapped_view
  105.                     response = view_func(request, *args, **kwargs)
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  22.                 return view_func(request, *args, **kwargs)
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/contrib/auth/views.py" in password_change
  261.         post_change_redirect = reverse('password_change_done')
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/core/urlresolvers.py" in reverse
  546.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/Users/peter/Projekte/proj-hoster/proj-hoster-env3/lib/python3.4/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  463.                              (lookup_view_s, args, kwargs, len(patterns), patterns))

Exception Type: NoReverseMatch at /accounts/password/change/
Exception Value: Reverse for 'password_change_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

【问题讨论】:

  • 看起来它没有尝试任何模式。你能显示根 url conf 吗?
  • 在根 url: url(r'^accounts/', include('accounts.urls', namespace='accounts'), name='account'),
  • 尝试在您的 accounts/urls.py 中将 name='password-change-done' 更改为 name='password_change_done'
  • 完成,错误仍然存​​在...
  • 在这种情况下,让我们看看您的完整回溯)(带有行号)

标签: django django-urls change-password


【解决方案1】:

对“密码更改完成”的引用之一带有破折号,另一个带有下划线。这可能与此有关!

【讨论】:

  • 很遗憾没有:-(
【解决方案2】:

我意识到这是一个非常老问题,但我昨天遇到了同样的错误。我认为命名空间是问题所在。一旦你命名了 url,它们都需要以命名空间的名称(在你的情况下为“帐户”)和冒号作为前缀。如果您查看 password_change 视图的代码,它会(有条件地)基于“password_change_done”的 url 重定向。因为那个 url 没有用你的命名空间装饰,所以找不到。删除命名空间,确保你的 url 引用不再有它,你应该没问题。

【讨论】:

    猜你喜欢
    • 2018-07-18
    • 2014-11-20
    • 2016-05-28
    • 2019-05-28
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    相关资源
    最近更新 更多