/ / Django reset_password_confirm TemplateSyntaxError problem - django, django-templates

Django reset_password_confirm TemplateSyntaxError problem - django, django-templates

cuando uso django.contrib.auth.views.password_reset_confirm sin argumentos en absoluto, funciona y puedo representar la plantilla sin ningún problema, al agregar uidb36 y los argumentos de token fallan.

Capturó NoReverseMatch mientras se renderizaba: Invertido para "django.contrib.auth.views.password_reset_confirm" con argumentos "()" y argumentos de palabra clave "{" uidb36 ":" 111 "," token ":" 1111111111111 "}" no encontrado.

Respuestas

24 para la respuesta № 1

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

Algo 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/" })

registration / password_reset.html - es mi plantilla personalizada

cerrar sesión - es mi acción de cierre de sesión personalizada


6 para la respuesta № 2

Tuve este problema en Django 1.3 y perdí mucho tiempo porque el error puede enmascarar una serie de problemas subyacentes.

Necesitaba agregar esto a la parte superior de la plantilla de correo electrónico de restablecimiento:

{% load url from future %}

Además, el ejemplo en los documentos de Django no coincide con la url de muestra:

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

Así que tuve que cambiar el auth_password_reset_confirm por encima de password_reset_confirm.


6 para la respuesta № 3

Si estás usando Django 1.6+ y te encuentras con algo como esto, es posible que necesites actualizar uidb36 a uidb64 tanto en tu plantilla como en tus URL.

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

y restablecer enlace en la plantilla:

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


2 para la respuesta № 4

Para usuarios de Django 1.8+, simplemente copie esta URL a su principal urls.py archivo, para que reconozca el nombre de la 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 agrega esto mencionado por: @Lunulata a tu password_reset_email.html archivo:

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


1 para la respuesta № 5

Intenta agregar los siguientes a tu 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"),

0 para la respuesta № 6

Encontré esto para trabajar, copiado de la url predeterminada

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