Ошибка URL-адреса Django в шаблоне с представлением password_change - PullRequest
0 голосов
/ 29 июня 2011

Я использую Django 1.2.3-3+squeeze1 с сжатым Debian.

Я пытаюсь использовать представление смены пароля Django в своем приложении соответствует django.contrib.auth.views.password_change. это Похоже, это должно быть просто, но у меня были проблемы.

Для простоты и полноты я укажу на файлы моего приложения онлайн. Приложение bixfile . соответствующий проект Django: bixproj .

Соответствующая строка в url.py https://bitbucket.org/faheem/bixfile/src/49bcbab3a7be/urls.py#cl-65, а именно

url(r'^password_change/$', 'django.contrib.auth.views.password_change', {'post_change_redirect':reverse('top_folders')}, name="password_change"),

Это нарушает любой шаблон, в котором он используется. В настоящее время я только используя его в строке https://bitbucket.org/faheem/bixfile/src/71de33d01f43/templates/calgb_base.html#cl-21 шаблона calgb_base.html, который входит в набор шаблоны, включая представление индекса верхнего уровня, соответствующее шаблон https://bitbucket.org/faheem/bixfile/src/71de33d01f43/templates/index.html. строка в calgb_base.html равна

<li><a class="side" href="{% url password_change %}">Password Change</a></li>

При переходе наверх index представление, соответствующее https://bitbucket.org/faheem/bixfile/src/71de33d01f43/urls.py#cl-16 а также https://bitbucket.org/faheem/bixfile/src/71de33d01f43/views.py#cl-203 Я вижу ошибку, начиная с

Caught NoReverseMatch while rendering: Reverse for 'password_change'
with arguments '()' and keyword arguments '{}' not found.

Я сомневаюсь, что полный возврат полезен, но я вставил его в http://paste.lisp.org/display/122996.

Эта ошибка также воспроизводится как в Apache 2.2, так и в mod-wsgi. как встроенный тестовый сервер Django (см. ниже).

Если я перейду непосредственно к / password_change / относительной ссылке, я увижу Форма для изменения пароля, как и ожидалось.

Странно то, что все тесты, которые я написал, чтобы проверить это пройти и дать ожидаемый результат. Смотри например testIndexUrl , testIndexView а также test_password_change_url .

Вы можете запустить тесты из каталога bixproj с помощью

python manage.py test

Если вы хотите воспроизвести эту ошибку, это сравнительно легко.

Сначала скачайте проект (bixproj) и репозитории приложений (bixfile). Так

hg clone ssh://hg@bitbucket.org/faheem/bixproj
hg clone ssh://hg@bitbucket.org/faheem/bixfile

Затем убедитесь, что bixfile находится в пути Python. Изменить базы данных для использования SQLite. Затем измените

LOGIN_URL = '/'+BIXFILE_NAME+'/login/'
LOGIN_REDIRECT_URL= '/'+BIXFILE_NAME+'/'

до

LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL= '/'

Затем работает

python manage.py runserver

в каталоге bixproj на локальном компьютере и переход на URL по умолчанию http://127.0.0.1:8000/ должно отображать ошибку.

Я ожидаю, что смогу привести минимальный пример, показывающий ошибку, если необходимо, но я действительно надеюсь, что эта ошибка очевидна, и я не должен. Заранее спасибо.

1 Ответ

1 голос
/ 29 июня 2011

Ваш bixfiles.urls использует reverse.Это невозможно, потому что URL не были загружены при вызове reverse.

Django 1.4 будет иметь функцию reverse_lazy, которая решит эту проблему.

А пока вы можете:

  1. Реализацияreverse_lazy в вашем проекте (см. changeset 16121 ).
  2. Жесткий код URL вместо использования обратного
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...