"admin" не является зарегистрированным пространством имен в Django 1.4
Я пытаюсь обновить довольно большой проект Django до недавно выпущенного Django 1.4, и у меня возникли некоторые проблемы при запуске python manage.py test
.
многие внутренние тесты, которые прошли в Django 1.3, теперь терпят неудачу, с действительно странными сообщениями, которые я не могу исправить. Один, который появляется больше всего:
NoReverseMatch: u'admin' is not a registered namespace
это поднято для django.contrib.auth
тесты для изменения пароля, в частности (один из которых test_password_change_fails_with_mismatched_passwords (django.contrib.auth.tests.views.ChangePasswordTest)
. Странная вещь, пространство имен зарегистрирован правильно, и приложение функционирует просто отлично. Я импортирую admin "новым" способом:
url(r'^admin/', include(admin.site.urls)),
когда я Google эту ошибку, в частности, все, что я могу найти, это люди, импортирующие URL-адреса администратора, используя старую схему, и ничего, относящегося к этой проблеме вообще.
Я попытался удалить приложения из INSTALLED_APPS
один за другим, но тесты auth просто не пройдут. Кроме того, когда я загружаю интерпретатор Python из python manage.py shell
и выполнить reverse('admin:index')
URL-адрес разрешает /admin/
без ошибок. Я много читал код и не вижу, где это может падать.
как я уже говорил ранее, это не единственная ошибка, которая происходит. Я также получаю AttributeError: AUTH_PROFILE_MODULE
С . Как могут собственные тесты Django терпеть неудачу?
6 ответов
Короткий Ответ: у вас есть копия файлов шаблонов Django admin, скопированных в каталоге шаблонов вашего приложения из более ранней версии Django, затем вы обновили Django, но не обновили (переписали) эти локальные шаблоны.
Ответ: основной причиной этой проблемы является использование более старой версии файлов шаблонов Django admin (которые устанавливаются там, где установлен сам django, обычно python site-packages
или
как оказалось, это было связано с приказом TEMPLATE_LOADERS
ключ в моем файле настроек.
у меня было следующее:
TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.Loader',
'django.template.loaders.filesystem.Loader',
)
что, так или иначе, вызвало ошибку при реверсировании URL-адресов администратора. Переключение двух раундов решило проблему. Я хотел бы знать, как это происходит, поскольку он не воспроизводится в пустом проекте Django 1.4.
что был воспроизводимым, однако, был AttributeError
на settings.AUTH_PROFILE_MODULE
. Оказывается, это ошибка в Django 1.4, который был подан в день освобождения здесь.
попробуйте добавить namespace= "admin" В метод include в urls.py файл.
пример: url-адрес(р'^админ/', включить("someUrlpattern", пространство имен="админ"))
загрузчик шаблонов app_directories загружает шаблоны из каталога шаблонов INSTALLED_APPS, а загрузчик файловой системы загружает их из каталога шаблонов, настроенного в настройках TEMPLATE_DIRS.
переключение двух из них имеет огромное значение, потому что если у вас есть пользовательские шаблоны в вашем приложении, он не будет загружаться, если app_directories находится наверху. Если загрузчик файловой системы находится вверху, django сначала будет искать шаблон в каталоге шаблонов перед загрузкой по умолчанию из installed_apps.
вот почему он не воспроизводится в пустом проекте Django. Он будет искать шаблоны в нужных местах.
мой solutuion должен был обновить django до новейшего cersion: pip install --обновление django==1.6.1 перед этим проверьте установленную версию: pip freeze | grep Django - Я обнаружил, что на сервере релиза была старая версия, обновление решило эту проблему!
у меня было подобное сообщение об ошибке, потому что мой URLs conf имел 2 logout
URLs определены .
urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
url(r'^api/v1/', include(router.urls)),
url(r'^logout/$', auth_views.logout, name='logout'),
url(r'^login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
url(r'^logout/$', auth_views.logout, {'template_name': 'logged_out.html'}, name='logout'),
]