2016-09-16 27 views
0

我想使用Django的內置密碼重置。 我的urls.py如下。Django:反向不解析內置密碼重置的url

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>,+)/$'] 

回答

0

使用的命名空間中調用逆轉。

reverse('app_name:password_reset') 

或者將您的密碼重置URL移動到不帶名稱空間的單獨urls.py。

+0

reverse()調用是內置函數,所以我無法更改它。 –

0

你可以通過post_reset_redirectemail_template_name在你的URL參數:

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'),