2011-01-25 7 views
17

kiedy używam django.contrib.auth.views.password_reset_confirm bez argumentów w ogóle działa i mogę uczynić szablon bez problemu, podczas dodawania uidb36 i Token argumenty nie powiedzie.Django reset_password_confirm TemplateSyntaxError problemem

Złapano NoReverseMatch podczas renderowania: Odwróć dla 'django.contrib.auth.views.password_reset_confirm' z argumentami '()' i argumentami słów kluczowych '{' uidb36 ':' 111 ',' token ':' 1111111111111 '}' nie znaleziono.

+2

Proszę pokazać twoje urls.py. –

Odpowiedz

24

Najprawdopodobniej jest to problem z twoim url.py. Musisz ustawić odpowiedni wzorzec, aby pobrać wartości uidb36 i tokena przekazane jako parametry adresu URL. Jeśli nie, spowoduje to podobny błąd do tego, co widać powyżej.

Coś jak:

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

rejestracji/password_reset.html - to mój zwyczaj szablon

wylogowania - jest mój zwyczaj akcja wylogowania

+0

dziękuję, że masz rację =) – Afiku

+0

Wydaje się absurdalne, że coś wbudowanego w Django nie ma tego rodzaju informacji na oficjalnej stronie z dokumentacją. Tak czy inaczej, dzięki za odpowiedź! Nadal pomocne prawie dwa lata później –

6

miałem ten problem w Django 1.3, oraz zmarnował dużo czasu, ponieważ błąd może maskować wiele podstawowych problemów.

Musiałem dodać to na górze szablonu email Reset:

{% load url from future %} 

Również przykład w Django docs nie pasuje url próbkowania:

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

więc musiałem zmienić powyższe auth_password_reset_confirm na password_reset_confirm.

1

spróbuj dodać następujące wpisy do 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

Jeśli używasz Django 1.6 + i napotkasz coś takiego może się zdarzyć, że trzeba zaktualizować uidb36 do uidb64 zarówno w szablonie i twoi adresy URL.

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

i zresetować ogniwem w szablonie:

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

+0

Dzięki! ta odpowiedź zaoszczędziła mi nocy poszukiwań! – Rias

0

znalazłem to zadziałało, kopiowane z domyślnego url

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

Dla Django Ponad 1.8 użytkowników, po prostu skopiuj ten adres URL do głównego urls.py plik, tak, że rozpoznaje nazwę 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'), 

i dodać ten wspomniany przez: @Lunulata do password_reset_email.html plik:

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