首页 文章

升级Django和NoReverseMatch密码错误

提问于
浏览
3

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

/ accounts / password / reset / password_reset()中的TypeError有一个意外的关键字参数'post_change_redirect'请求方法:GET TypeErrorRequest 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 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”在passwd_reset 109中 . 返回password_reset(request,* args,** kwargs)文件“/ home / martin /Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/utils/decorators.py“in _wrapped_view 99. response = view_func(request,* args,** kwargs)File”/ home密码注册142中的/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/contrib/auth/views.py“ . post_reset_redirect = reverse('password_reset_done')文件”/ home / martin / Work / wisepress.com / virtualenv / local / lib / python2.7 / site-packages / django / core / urlresolvers.py“in reverse 536. return iri_to_uri(resolver._reverse_with_prefix(view,prefix,* args,** kwargs))文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python 2.7 / site-packages / django / core / urlresolvers.py“in _reverse_with_prefix 456.(lookup_view_s,args,kwargs,len(patterns),patterns))异常类型:NoReverseMatch at / accounts / password / reset / Exception Value:Reverse for找不到带有参数'()'和关键字参数'{}'的'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中它工作正常,但在较新的版本中给我错误 . 你认识任何人如何解决它?谢谢

EDIT: 我在urls.py中更改了一些重置密码的网址 . 现在有:

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行的错误>“django.contrib.auth.views.password_reset_confirm”的反向参数'()'和关键字参数'{u'uidb64':'',u'token':''}'找不到 . 尝试了1种模式:['accounts / password / reset / confirm /(?P \ w)/(?P [\ d \ w-])/ $']

On line 44 is now:

<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>

回溯:文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/handlers/base.py”在get_response 137. response = 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“in rendered_content 82. content = template.render(context)File”/ home / martin /Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/base.py“在渲染140中 . 返回self._render(上下文)文件”/ home / martin / Work / wisepress .com / virtualenv / local / lib / python2.7 / site-packages / django / template / base.py“在_render 134中 . 返回self.nodelist.render(context)文件”/home/martin/Work/wisepress.com /virtualenv/local/lib/python2.7/site-packages/django/template/base.py“in render 840. bit = self.render_node(node,context)File”/ home / mar tin / work / wisepress.com / virtualenv / local / lib / python2.7 / site-packages / django / template / debug.py“在render_node 78中 . 返回node.render(context)文件”/ home / martin / Work / wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/template/defaulttags.py“in render 447. six.reraise(* exc_info)File”/home/martin/Work/wisepress.com/渲染433中的virtualenv / local / lib / python2.7 / site-packages / django / template / defaulttags.py“url = reverse(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 456中的文件“/home/martin/Work/wisepress.com/virtualenv/local/lib/python2.7/site-packages/django/core/urlresolvers.py” . (lookup_view_s,args,kwargs, len(模式),模式))异常类型:NoReverseMatch at / accounts / password / reset / Exception Value:Reverse fo r'django.contrib.auth.views.password_reset_confirm'带参数'()'和关键字参数'{u'uidb64':'',u'token':''}'找不到 . 尝试过1种模式:['accounts / password / reset / confirm /(?P \ w)/(?P [\ d \ w-])/ $']

1 回答

  • 0

    password_reset url模式中, template_name 不应与 email_template_name 相同 . template_name 是一个向用户显示密码重置表单的模板 .

相关问题