'admin' ist kein registrierter Namensraum in Django 1.4
Ich bin versucht, zu aktualisieren Recht große Django-Projekt, um die neu veröffentlichten Django 1.4, und ich habe einige Probleme beim ausführen von python manage.py test
.
Viele der internen tests, die bestanden in Django 1.3 sind jetzt nicht, mit wirklich sonderbaren Nachrichten, die ich kann nicht scheinen, um zu lösen. Eine, die scheint, die meisten ist:
NoReverseMatch: u'admin' is not a registered namespace
Dies ist die Messlatte für die django.contrib.auth
tests für die Passwort-änderung im besonderen (von denen test_password_change_fails_with_mismatched_passwords (django.contrib.auth.tests.views.ChangePasswordTest)
. Das merkwürdige ist, den namespace korrekt registriert ist und die Anwendung funktioniert genauso gut. Ich bin das importieren von admin in die "neue" Weg:
url(r'^admin/', include(admin.site.urls)),
Wenn ich das Google diesen Fehler insbesondere, alle die ich finden kann ist die Menschen der Import des admin-URLs mit dem alten Schema, und nichts in Bezug auf dieses Problem.
Ich habe versucht, das entfernen von apps aus INSTALLED_APPS
eins nach dem anderen, aber der auth-tests einfach nicht passieren. Auch, wenn ich es lade ein Python-interpreter aus python manage.py shell
und ausführen reverse('admin:index')
die URL aufgelöst wird /admin/
mit keine Fehler. Ich habe gelesen, durch den code ausgiebig, und nicht sehen kann wo diese kann herunterfallen.
Wie ich bereits erwähnt habe, ist dies nicht der einzige Fehler, der passiert. Ich bin auch immer AttributeError: AUTH_PROFILE_MODULE
von der test_site_profile_not_available (django.contrib.auth.tests.models.ProfileTestCase)
test, obwohl AUTH_PROFILE_MODULE
definiert ist, in meinem settings.py
- Datei. Wie kann Django eigenen tests so Versagen?
InformationsquelleAutor der Frage Rob Golding | 2012-03-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: Sie eine Kopie der Django-admin-Vorlage kopierten Dateien auf der app-Vorlagen-Verzeichnis von einer früheren version von Django, dann aktualisiert Sie Django, aber nicht aktualisieren (re-Kopie) die lokale Vorlagen.
Lange Antwort: Die Hauptursache für dieses problem ist die Verwendung einer älteren version der Django-admin-template-Dateien (welche sind installiert, wo django selbst installiert ist, in der Regel python ' s
site-packages
oderdist-packages
- Verzeichnis). Es ist eine rückwärts-inkompatible änderung in Django 1.5 über url-template-tag, in dem der erste parameter muss ein string sein, von Django 1.5 release notes:So, das problem ist, Sie haben eine Kopie der admin-template-Dateien in Ihre app im Ordner "Vorlagen", die allem coppied von einer früheren version von Django. Dies geschieht in der Regel zum überschreiben des Standard-admin-Vorlagen. Weil der rückwärts-inkompatible änderung angegeben ist, diese veraltete template-Datei kann nicht geladen werden in einer neueren Django Umwelt, und verursachen die seltsamen Fehler:
NoReverseMatch: u'admin' is not a registered namespace
.Ändern, um von
TEMPLATE_LOADERS
Einträge ignorieren Sie die lokalen admin-templates änderungen zu Gunsten der Standard-Vorlagen-Datei (da Standard Django Vorlagen geladen werden, indem der komplette Pfad mitfilesystem.Loader
). Wenn die änderungen notwendig sind (was normalerweise der Fall ist), müssen Sie aktualisieren Sie Ihre lokalen admin-Vorlage-Dateien von Ihrem neuen Django-installation Vorlagen und erneut, wie sich Ihre änderungen auf Sie.Hinweis 1: Eine ähnliche situation ist, wenn die lokalen admin-Vorlagen, die neuer sind als die Django-installation ist Standard, das scheint das der Fall ist. Ebenso die bessere Lösung ist, aktualisieren Sie alle Kopien der admin-Vorlagen.
Hinweis 2: eine Andere Möglichkeit, sich solche Fehler bei der Verwendung von virtualenv. Zum Beispiel, wenn Sie Ihr Projekt mit einem virtualenv aber die
TEMPLATE_DIRS
Eintrag für Django-admin-Vorlagen, um Ihre globalen python installation, können Sie diese Fehlermeldung erhalten.InformationsquelleAutor der Antwort Amir Ali Akbari
Wie es sich herausstellt, war dies aufgrund der Bestellung des
TEMPLATE_LOADERS
Schlüssel in meiner settings-Datei.Hatte ich folgende:
welche, irgendwie verursacht die Fehler, die beim Rückwärtsfahren admin-URLs. Die Umschaltung der zwei Runden löste das Problem. Ich würde gerne wissen, wie das passiert, da es nicht reproduzierbar in eine leere Django 1.4-Projekt.
Was war reproduzierbar, allerdings war die
AttributeError
fürsettings.AUTH_PROFILE_MODULE
. Stellt sich heraus, das ist ein bug in Django 1.4, die eingereicht wurde am release-Tag hier.InformationsquelleAutor der Antwort Rob Golding
Versuchen add namespace="admin" innerhalb der include-Methode im urls.py Datei.
ex: url(r'^admin/', include("someUrlpattern", namespace="admin"))
InformationsquelleAutor der Antwort user1552891
Den app_directories template loader lädt Vorlagen aus den INSTALLED_APPS template-Verzeichnis, während der Dateisystem-loader lädt Sie aus dem Vorlagen-Verzeichnis konfiguriert, in Ihrem TEMPLATE_DIRS Einstellungen.
Umschalten der zwei von Ihnen macht einen riesigen Unterschied, denn wenn Sie benutzerdefinierte Vorlagen in Ihre app wird nicht geladen, wenn die app_directories ist an der Spitze. Wenn das Dateisystem Lader ist an der Spitze, django suchen ein template in deinem template-Verzeichnis die ersten vor dem laden der default wird von den installed_apps.
Deshalb ist es nicht reproduzierbar in eine leere Django Projekt. Es wird nach Vorlagen an den richtigen stellen.
InformationsquelleAutor der Antwort
Meine solutuion war ein upgrade django auf die neueste cersion:
pip install --upgrade django==1.6.1
vor diesem, überprüfen Sie Ihre installierte version:
pip freeze | grep-Django
- Ich fand, dass auf release-server gab es eine alte version ist, aktualisieren Sie dieses Problem gelöst!
InformationsquelleAutor der Antwort mishaikon
Ich hatte eine ähnliche Fehlermeldung, die mir passieren, weil meine URLs conf hatte 2
logout
URLs definiert .InformationsquelleAutor der Antwort Jarvis Jones