2012-06-21 10 views
17

Tengo un problema para obtener el bit password_Reset_confirm funcionando.NoReverseMatch en password_Reset_confirm

url:

(r'^password_reset/$', 'django.contrib.auth.views.password_reset'), 
(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'), 
(r'^password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm'), 

password_reset_email.html, que incluye lo siguiente:

{% load url from future %} 
Someone asked for password reset for email {{ email }}. Follow the link below: 
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb36=uid token=token %} 

Pero luego, después de la presentación de mi correo electrónico para resetear la contraseña, me sale este mensaje de error se muestra:

NoReverseMatch at/password_reset/Reverse for 'password_reset_confirm' con argumentos '()' y argumentos de palabra clave '{' uidb36 ':' 1 ',' token ':' 38d-b5ec0b2a2321f522f954 '}' no encontrado.

Pensé que dado que esto estaba usando una construcción a la vista, ¿no tendría que preocuparme por nada más?

Gracias por el consejo,

Actualización:

Después de usar la ruta completa, parece que funciona. Sin embargo, envía dos correos electrónicos: y cada uno tiene un enlace diferente. ¿Porqué es eso? ¿Y dónde configuro el {{dominio}}? Gracias

Follow the link below: 
http://example.com/password_reset_confirm/1-38d-b5ec0b2a2321f522f954/ 

Follow the link below: 
http://example.com/password_reset_confirm/2-38d-18482e1f129c84b9c2bc/ 

Actualización 2

lo he descubierto. Solo en caso de que alguien más tenga este problema. Es necesario configurar el nombre de dominio que el sitio para su aplicación:

En Admin o consola de Django:

>>> my_site = Site.objects.get(pk=1) 
>>> my_site.domain = 'somedomain.com' 
>>> my_site.name = 'Some Domain' 
>>> my_site.save() 

El otro problema por las que podría obtener dos mensajes de correo electrónico cuando restablecerlo, se debe a que se puede tener múltiples nombres de usuario asociados con la misma dirección de correo electrónico. Es bastante tonto. Esto es lo siguiente que tengo que enfrentar.

+3

Creo que se supone que debe especificar el nombre de la vista en lugar del nombre de la URL. Algo así como '{% url 'django.contrib.auth.views.password_reset_confirm' ...%}' –

+0

Sí que funcionó. Extraño, porque lo había copiado de la documentación de Django. Ahora quedan dos problemas, por favor vea la pregunta actualizada. Gracias – Houman

+0

Cesar, solucioné los otros dos problemas y actualicé la pregunta. Si desea poner su comentario como respuesta, lo tildaré como respuesta. Gracias – Houman

Respuesta

4

Al utilizar la etiqueta de plantilla url, debe especificar la vista y no la url en sí. Dado que está utilizando en su 'django.contrib.auth.views.password_reset_confirm' URLconf que se debe utilizar la siguiente manera:

{% url 'django.contrib.auth.views.password_reset_confirm' ... %} 

Más sobre la etiqueta url plantilla en la documentación de Django Built-in template tags and filters.

0

Puede ser una vista integrada, pero aún necesita una URL para ello. Debe definir uno en urls.py y vincularlo a la vista password_reset_confirm.

+0

Ya tengo una url definida para eso, mire arriba ... (a menos que lo haya entendido mal) La solución de Cesar realmente funciona. Pero ahora todavía no estoy allí por completo. Acabo de actualizar la pregunta. Gracias – Houman

9

asignar una URL a la etiqueta url plantilla, puede especificar un name a la url en el urls.py

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

y entonces usted puede utilizar la etiqueta con el nombre url

{% url 'password_reset_confirm' uidb64=uid token=token %} 
0

Solo copie esta URL en su archivo urls.py principal, para que reconozca el nombre de la URL

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

Cuestiones relacionadas