2009-06-02 9 views
6

Próbuję użyć konfiguracji resetowania hasła, która jest dostarczana z Django, ale dokumentacja nie jest dla niego zbyt dobra. Używam Django 1.0 i wciąż otrzymuję ten błąd:Django 1.0, używając domyślnego resetowania hasła

Caught an exception while rendering: Reverse for 'mysite.django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments ... 

w moim URLconf mam coś takiego:

#django.contrib.auth.views 
urlpatterns = patterns('django.contrib.auth.views',  
    (r'^password_reset/$', 'password_reset', {'template_name': 'accounts/registration/password_reset_form.html', 'email_template_name':'accounts/registration/password_reset_email.html', 'post_reset_redirect':'accounts/login/'}), 
    (r'^password_reset/done/$', 'password_reset_done', {'template_name': 'accounts/registration/password_reset_done.html'}), 
    (r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'password_reset_confirm', {'template_name': 'accounts/registration/password_reset_confirm.html', 'post_reset_redirect':'accounts/login/', 'post_reset_redirect':'accounts/reset/done/'}), 
    (r'^reset/done/$', 'password_reset_complete', {'template_name': 'accounts/registration/password_reset_complete.html'}), 
) 

Problem wydaje się być w tym pliku:

password_reset_email.html 

na linii 7

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %} 

Nie wiem, co się dzieje, więc każda pomoc będzie doceniona.

Dzięki

Odpowiedz

2

Po prostu chciałem opublikować rozwiązanie, które wymyśliłem. Problem był w tym wierszu:

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %} 

nie jestem w 100% dlatego też, więc po prostu ciężko zakodowany url tak:

http://mysite.com/accounts/reset/{{uid}}-{{token}}/ 
0

Jest to problem, ja sam nie zorientowali się 10 minut temu. Rozwiązaniem jest dodanie wartości post_change_redirect do słownika argumentów, które przechodzisz do widoku password_reset.

Więc to kopalnia teraz wyglądać następująco:

(r'^/password/$', password_change, {'template_name': 'testing/password.html', 'post_change_redirect': '/account/'}) 

Mam nadzieję, że zrobi to za Ciebie! Zgadzam się, że brakuje dokumentacji dotyczącej tej konkretnej funkcji, ale to rozwiązało dokładnie ten sam problem dla mojego projektu.

Edytuj: Naprawdę powinienem przewinąć - już to załączyłeś. Przepraszamy za to, ale mam nadzieję, że go posortujesz :)

3

Edytuj: Użyłem twojego przykładu i musiałem się zmienić, aby nie używać parametrów słów kluczowych.

{% url django.contrib.auth.views.password_reset_confirm uid, token %} 

Parametry o nazwach działają, o ile zdefiniowano zarówno identyfikator uid, jak i token. Jeśli jedno z nich nie jest zdefiniowane lub puste, pojawia się ten sam błąd:

{% url django.contrib.auth.views.password_reset_confirm uidb36=uid, token=token %} 
+0

Czy możesz wyjaśnić to nieco więcej. Co masz na myśli przez "Spróbuj dodać linię dla password_reset_confirm w urls.py".Trzeci adres URL w powyższym przykładzie to password_reset_confirm. Jak inaczej powinienem dodać go do mojego pliku urls.py? Dzięki – Joe

+0

Mój błąd polegał na tym, że to, co napisałem, nadrobiłem dla mnie. – dar

2

Mam zmagał się z tym ponad godzinę próbując wszystkiego na tej stronie i na każdej innej stronie w Internecie. Wreszcie, aby rozwiązać problem w moim przypadku musiałem usuwać

{% load url from future %} 

ze szczytu mojego password_reset_email.html szablonu.

Należy również zauważyć, "uidb36 = uid" w skrypcie adresu URL. Oto mój pełny szablon password_reset_email.html, mam nadzieję, że ktoś to zaoszczędził:

{% autoescape off %} 
    You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}. 


Please go to the following page and choose a new password: 
{% block reset_link %} 
{{ protocol }}://{{ domain }}{% url django.contrib.auth.views.password_reset_confirm uidb36=uid token=token %} 
{% endblock %} 

Your username, in case you've forgotten:" %} {{ user.username }} 

Thanks for using our site! 

The {{ site_name }} team 

{% endautoescape %} 
Powiązane problemy