2011-01-25 9 views
17

quando uso django.contrib.auth.views.password_reset_confirm senza argomenti del tutto funziona e che può rendere il modello senza alcun problema, quando si aggiungono uidb36 e Token argomenti fallisce.Django reset_password_confirm TemplateSyntaxError problema

Catturato NoReverseMatch durante il rendering: Reverse per 'django.contrib.auth.views.password_reset_confirm' con argomenti '()' e argomenti parola chiave '{' uidb36 ':' 111 ',' token ':' 1111111111111 '}' non trovato.

+2

prega di mostrare la tua urls.py. –

risposta

24

Molto probabilmente è un problema con il tuo urls.py. È necessario impostare il modello giusto per afferrare i valori di token e uidb36 passati come parametri URL. In caso contrario, genererà un errore simile a quello che vedi sopra.

Qualcosa di simile:

(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', {'template_name' : 'registration/password_reset.html', 'post_reset_redirect': '/logout/' }) 

registrazione/password_reset.html - è il mio modello personalizzato

di logout - è mia abitudine azione di logout

+0

grazie che avevi ragione =) – Afiku

+0

Sembra assurdo per qualcosa di integrato in Django di non avere questo tipo di informazioni sul loro sito di documentazione ufficiale. In entrambi i casi, grazie per questa risposta! Ancora utile quasi due anni dopo –

6

ho avuto questo problema in Django 1.3, e ha sprecato un sacco di tempo perché l'errore può mascherare una serie di problemi sottostanti.

avevo bisogno di aggiungere questo alla parte superiore del modello di ripristino e-mail:

{% load url from future %} 

Inoltre, l'esempio nella documentazione Django non corrisponde l'URL di esempio:

{{ protocol}}://{{ domain }}{% url 'auth_password_reset_confirm' uidb36=uid token=token %} 

Così ho ha dovuto modificare il auth_password_reset_confirm sopra a password_reset_confirm.

1

Prova ad aggiungere segue al urls.py

(r'^reset/(?P<uidb36>[0-9A-Za-z]{1,13})-(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'django.contrib.auth.views.password_reset_confirm'), 
6

Se si sta utilizzando Django 1.6 + ed esegue in qualcosa di simile potrebbe essere che è necessario aggiornare uidb36 a uidb64 sia il modello e la vostra URL.

Esempio url: url(r'^password/reset/confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', auth_views.password_reset_confirm

e reimpostare link nel template:

{{ protocol}}://{{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}

+0

Grazie !! questa risposta mi ha salvato una notte di ricerche !! – Rias

0

Ho trovato questo lavoro, copiato dal URL predefinito

url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', auth_views.password_reset_confirm, name='password_reset_confirm'),

2

per Django Più di 1,8 utenti, copia questo URL sul tuo numero principale urls.py di file, in modo che riconosca il nome dell'URL

url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 
     'django.contrib.auth.views.password_reset_confirm', 
     name='password_reset_confirm'), 

E aggiungere questo di cui parla: @Lunulata al password_reset_email.html di file:

{{ protocol}}://{{ domain }}{% url'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}

Problemi correlati