template manage jinja django django-templates

manage - templates django settings



Django reset_password_confirm TemplateSyntaxError problem (7)

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 falla.

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


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


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


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

logout - es mi acción de logout personalizada


Para usuarios de Django 1.8+, simplemente copie esta URL a su archivo urls.py principal, 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 agregue esto mencionado por: @Lunulata a su archivo password_reset_email.html :

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


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 %}


Solo agrega esta línea a tu urls.py:

url(''^'', include(''django.contrib.auth.urls'')),

Esto habilita el flujo de trabajo de django reset_password.

Luego invalide su login.html para incluir la línea: <div class="password-reset-link"> href="{{ password_reset_url }}">{% trans ''Forgotten your password or username?'' %}</a></div> <div class="password-reset-link"> href="{{ password_reset_url }}">{% trans ''Forgotten your password or username?'' %}</a></div>

Ahora debería poder usar el Django PasswordResetView incorporado incluido con Django siempre que su configuración de correo electrónico esté configurada.


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 anterior a password_reset_confirm .