【问题标题】:Upgrade Django and NoReverseMatch password Error升级 Django 和 NoReverseMatch 密码错误
【发布时间】:2015-12-14 01:36:33
【问题描述】:

我正在尝试将旧版本 Django 1.5 升级到更新版本。 升级后,当我进入密码重置页面时,Django 给我错误:

TypeError at /accounts/password/reset/

password_reset() 得到了一个意外的关键字参数“post_change_redirect”

请求方法:GET 类型错误请求 URL:http://localhost:8000/accounts/password/reset/ Django 版本:1.6.11 异常类型:TypeError 异常值:

password_reseteset() 得到了一个意外的关键字参数“post_change_redirect”

异常位置:/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/utils/decorators.py 在 _wrapped_view,第 99 行 Python 可执行文件:/home/martin/Work/wisepress.com/virtualenv/bin/python Python 版本:2.7.8

--

追溯: get_response 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/handlers/base.py” 112.响应=wrapped_callback(请求,*callback_args,**callback_kwargs) passwd_reset 中的文件“/home/martin/Work/wisepress.com/eshopwisepress/wp_auth/views.py” 109. return password_reset(request, *args, **kwargs) _wrapped_view 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/utils/decorators.py” 99. 响应 = view_func(请求,*args,**kwargs) password_reset 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/contrib/auth/views.py” 142. post_reset_redirect = 反向('password_reset_done') 反向文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py” 536. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) _reverse_with_prefix 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py” 456. (lookup_view_s, args, kwargs, len(patterns), patterns))

异常类型:NoReverseMatch at /accounts/password/reset/ 异常值:未找到带有参数“()”和关键字参数“{}”的“password_reset_done”的反向。尝试了 0 个模式:[]

在 urls.py 我有:

      url(r'^password/reset/done/$', 'django.contrib.auth.views.password_reset_done', name='passwd_reset_done'),
      url(r'^password/reset/confirm/(?P<uidb36>\w+)/(?P<token>[\d\w-]+)/$', 'django.contrib.auth.views.password_reset_confirm_uidb36', name='passwd_reset_confirm'),
      url(r'^password/reset/completed/$', 'django.contrib.auth.views.password_reset_complete', name='passwd_reset_complete'),
      url(r'^password/reset/$', passwd_reset, {'template_name':'emailing/registration-activation/password_reset_email.html'}, name='password_reset'),

在views.py中我有:

from django.contrib.auth.views import password_reset

def passwd_reset(request, *args, **kwargs):
    kwargs['password_reset_form'] = PasswdResetForm
    kwargs['email_template_name'] = 'emailing/registration-activation/password_reset_email.html'
    kwargs['from_email'] = FROM_EMAIL
    return password_reset(request, *args, **kwargs)

在 Django 1.5 中它工作正常,但在较新的版本中给我错误。 你知道任何人如何解决它? 谢谢

编辑: 我在 urls.py 中更改了一些用于重置密码的 url。现在在那里:

    url(r'^password/reset/done/$', 'django.contrib.auth.views.password_reset_done', name='password_reset_done'),
    url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', name='password_reset_confirm'),
    url(r'^password/reset/completed/$', 'django.contrib.auth.views.password_reset_complete', name='password_reset_complete'),
    url(r'^password/reset/$', passwd_reset, {'template_name':'emailing/registration-activation/password_reset_email.html'}, name='password_reset'),

现在我有错误:

模板错误: 在模板 /home/martin/Work/wisepress.com/eshopwisepress/templates/emailing/registration-activation/password_reset_email.html 中,第 44 行出错

> 没有找到带有参数 '()' 和关键字参数 '{u'uidb64': '', u'token': ''}' 的 'django.contrib.auth.views.password_reset_confirm' 的反向操作。尝试了 1 种模式:['accounts/password/reset/confirm/(?P\w+)/(?P[\d\w-]+)/$']

第 44 行现在是:

<a href="{{ protocol }}://{{ site_name }} {% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %} " target="_blank" style="color: #68b58e; text-decoration: none; font-style: italic;">Reset password</a><br/><br/>

--

追溯: get_response 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/handlers/base.py” 137. 响应 = response.render() 渲染中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/response.py” 105. self.content = self.rendered_content 渲染内容中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/response.py” 82. 内容 = 模板. 渲染(上下文) 渲染中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/base.py” 140.返回self._render(上下文) _render 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/base.py” 134.返回self.nodelist.render(上下文) 渲染中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/base.py” 840.bit = self.render_node(节点,上下文) render_node 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/debug.py” 78. 返回节点.render(context) 渲染中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/defaulttags.py” 447. 六.reraise(*exc_info) 渲染中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/defaulttags.py” 433. url = 反向(view_name,args=args,kwargs=kwargs,current_app=context.current_app) 反向文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py” 536. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) _reverse_with_prefix 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py” 456.(lookup_view_s,args,kwargs,len(模式),模式))

异常类型:NoReverseMatch at /accounts/password/reset/ 异常值:'django.contrib.auth.views.password_reset_confirm' 与参数'()' 和关键字参数'{u'uidb64': '', u'token': ''}' 的相反。尝试了 1 种模式:['accounts/password/reset/confirm/(?P\w+)/(?P[\d\w-]+)/$']

【问题讨论】:

  • 你能发布整个回溯吗?
  • 回溯:get_response 112 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/handlers/base.py” . response = Wrapped_callback(request, *callback_args, **callback_kwargs) 文件 "/home/martin/Work/wisepress.com/eshopwisepress/wp_auth/views.py" in passwd_reset 109. return password_reset(request, *args, **kwargs ) _wrapped_view 99 中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/utils/decorators.py”。 response = view_func(request, *args, * *kwargs)
  • 最好编辑问题并在那里添加回溯,这样您就可以很好地格式化它。我对错误消息感到困惑,因为post_change_redirect 仅用于password_change 方法。您是否在urls.py 中使用password_changepassword_change_done 视图?此外,最好使用与Django uses 相同的网址名称,例如name='password_reset_done' 而不是name='passwd_reset_done'
  • 以更好的格式回溯:pastebin.com/n9hFgFxy
  • 非常感谢,现在我将 template_name 更改为 email_template_name,现在它可以工作了 :-)

标签: python django


【解决方案1】:

在您的 password_reset 网址格式中,template_name 不应与您的 email_template_name 相同。 template_name 是一个向用户显示密码重置表单的模板。

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 2017-09-05
    • 2013-09-14
    • 1970-01-01
    • 2013-09-21
    • 2023-03-29
    • 2015-10-24
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多