首页 文章

Django:反向是没有解析内置密码重置的URL

提问于
浏览
0

我想使用Django的内置密码重置 . 我的urls.py如下 .

app_name = 'recruiter'

urlpatterns= [
#urls
]

urlpatterns += [
url(r'^password_reset_done/$', password_reset_done, name='password_reset_done'),
url(r'^password_reset/$', password_reset, name='password_reset'),
url(r'^password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>,+)/$', password_reset_confirm, name='password_reset_confirm'),
url(r'^password_reset_complete/$', password_reset_complete, name='password_reset_complete'),
]

如果我这样做,那么它就会在这一内置函数中出错 .

reverse('password_reset')

如果我删除 app_name = 'recruiter' 然后它工作正常,但其他应用程序功能删除了命名空间 . 我该如何解决这个问题?

此外,如果我删除 app_name = 'recruiter' 并尝试重置密码,然后在提交电子邮件后,我在此行上收到错误 .

{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

错误就像:

NoReverseMatch at /recruiter/password_reset/

Reverse for 'password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'Mw', u'token': u'4fd-f1aeba7ed3a5410a30da'}' not found. 1 pattern(s) tried: ['recruiter/password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>,+)/$']

2 回答

  • 0

    使用调用中的命名空间进行反向 .

    reverse('app_name:password_reset')
    

    或者将密码重置URL移动到没有命名空间的单独urls.py .

  • 0

    您可以在您的网址中传递 post_reset_redirectemail_template_name 作为参数:

    url(r'^password_reset/$', password_reset, {'email_template_name': 'recruiter/password_reset_email.html', 'post_reset_redirect': 'recruiter:password_reset_done'}, name='password_reset'),
    

    现在它将重定向到 recruiter:password_reset_done ,您可以在 recruiter/templates/recruiter/password_reset_email.html 中使用自己的电子邮件模板,并为 password_reset_confirm 指定正确的名称空间:

    {{ protocol }}://{{ domain }}{% url 'recruiter:password_reset_confirm' uidb64=uid token=token %}
    

    请注意,您还可以将 template_name 传递给URL以使用您自己的密码重置模板:

    url(r'^password_reset/$', password_reset, {'template_name': 'recruiter/password_reset.html', 'email_template_name': 'recruiter/password_reset_email.html', 'post_reset_redirect': 'recruiter:password_reset_done'}, name='password_reset'),
    

相关问题