2011-01-25 18 views
17

cuando uso django.contrib.auth.views.password_reset_confirm sin argumentos para nada funciona y que puede hacer que la plantilla sin ningún problema, al agregar uidb36 y red en los argumentos de que falle.Django reset_password_confirm TemplateSyntaxError problema

Caught NoReverseMatch while rendering: Invertir para 'django.contrib.auth.views.password_reset_confirm' con argumentos '()' y argumentos de palabras clave '{' uidb36 ':' 111 ',' token ':' 1111111111111 '}' extraviado.

+2

Por favor, mostrar tu urls.py. –

Respuesta

24

Lo más probable es que sea un problema con tu urls.py. Debe configurar el patrón correcto para tomar los valores uidb36 y token pasados ​​como parámetros de URL. Si no, arrojará un error similar a lo que ve arriba.

Algo así como:

(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/' }) 

registro/password_reset.html - es mi nueva plantilla

cierre de sesión - es mi costumbre acción de cierre de sesión

+0

gracias, tenías razón =) – Afiku

+0

Parece absurdo que algo incorporado en Django no tenga este tipo de información en su sitio oficial de documentación. De cualquier manera, gracias por esta respuesta! Todavía útil casi dos años después –

6

tuve este problema en Django 1.3, y desperdicia mucho tiempo porque el error puede enmascarar una serie de problemas subyacentes.

que tenía que añadir esto a la parte superior de la plantilla de correo electrónico de restablecimiento:

{% load url from future %} 

Además, el ejemplo en la documentación de Django no coincide con la URL de ejemplo:

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

Por lo tanto, Tuvo que cambiar el auth_password_reset_confirm de arriba a password_reset_confirm.

1

Trate de añadir siguiente a su 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

Si está utilizando Django 1.6 + y se encuentra con algo como esto podría ser que necesita actualizar uidb36 a uidb64 tanto en su plantilla y su urls.

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

y restablecer eslabón de plantilla:

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

+0

¡Gracias! esta respuesta me salvó una noche de búsqueda !! – Rias

0

he encontrado que esto funcione, copiada de la URL por defecto

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

Para Django 1.8+ usuarios, simplemente copie esta URL a su teléfono principal urls.py archivo, de modo que reconozca el nombre 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'), 

y añadir mencionada por: @Lunulata a su password_reset_email.html archivo:

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

Cuestiones relacionadas