Поймал NoReverseMatch при рендеринге с использованием общего представления PasswordChangeForm Django - PullRequest
2 голосов
/ 10 октября 2010

Я пытаюсь использовать универсальное представление PasswordChangeForm и password_change в Django и сталкиваюсь с ошибкой NoReverseMatch.

Вот мой urls.py:

    (r'^change_pass/','django.contrib.auth.views.password_change', {'post_change_redirect':'/home'}),

Затем я пытаюсь вызвать из шаблона следующее:

<form action="{% url django.contrib.auth.views.password_change post_change_redirect="/home/userpage" %}" method="POST">

Я получаю

Поймано NoReverseMatch при рендеринге: обратное для 'django.contrib.auth.views.password_change' с аргументами '()' и аргументами ключевых слов '{' post_change_redirect ': u' / home / userpage '}' не найдено.

Что я делаю не так? Я подумал, что если в urls.py объявлена ​​необязательная переменная, вы можете переопределить ее при вызове, указав ее в качестве именованного аргумента. Спасибо!

1 Ответ

1 голос
/ 10 октября 2010

Как вы определили URL, параметр post_change_redirect не является обязательным - фактически он вообще не принимается. Представление всегда получает жестко запрограммированное значение, которое вы определили в urlconf. Поэтому, когда тег {% url %} начинает искать представление password_change, которое принимает параметр post_change_redirect, он не может найти его, потому что вы его не определили.

Если вы думаете о том, как вы определили URL-адрес, куда пойдет аргумент, если вызывающая сторона захочет переопределить его?

...