/ / ImportError nach dem Verschieben der App in einen verschachtelten Ordner - django

ImportError nach dem Verschieben der App in einen verschachtelten Ordner - django

Meine Bewerbung hat einwandfrei funktioniert, als ich sehen wollte, ob ich mein Projekt besser organisieren kann. Ich habe dieses Tutorial durchgelesen zur Strukturierung eines Django-Projekts.

Vor meiner Projektstruktur war wie folgt:

  • camucamu
    • Bücher
      • admin.py
      • models.py
      • views.py
      • __init__.py
    • statisch
    • Vorlagen
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Ich wollte die Bücher-App in einen Apps-Ordner verschieben. Also habe ich das gemacht und die Projektstruktur wie folgt geändert:

  • camucamu
    • Apps
      • Bücher
        • admin.py
        • models.py
        • views.py
        • __init__.py
    • statisch
    • Vorlagen
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Ich habe dann die Importe in views.py und admin.py geändert von books.models zu apps.books.models. Ich habe mich auch verändert INSTALLED_APPS in settings.py von Büchern zu apps.books.

Beim Versuch, syncdb auszuführen, wird folgende Fehlermeldung angezeigt:

raise ImproperlyConfigured("ImportError %s: %s" % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError apps.books: No module named apps.books

Was vermassle ich hier, damit meine App nicht mehr gefunden wird?

Antworten:

4 für die Antwort № 1

Ihr Apps-Ordner hat keine __init__.py Datei, so dass es nicht als Python-Modul erkannt werden kann


1 für die Antwort № 2

Ich habe den gleichen Fehler erhalten, der dem gleichen Leitfaden folgt, da der letzte Punkt der folgenden Liste nicht zitiert wurde. Stellen Sie sicher, dass Sie die folgenden Änderungen vorgenommen haben:

  • Erstellen Sie ein Leerzeichen __init__.py Datei im Apps-Ordner (benötigt Python, um es als Paket zu erkennen)
  • Aktualisieren Sie die Importanweisungen überall dort, wo Sie auf eine externe App verweisen:

    from projectname.apps.appname.models import YourModel, YourOtherModel
    
  • Innerhalb settings.py bearbeiten INSTALLED_APPS so dass es so aussieht:

    INSTALLED_APPS = (
    
    ...
    
    # apps
    "projectname.apps.appname1",
    "projectname.apps.appname2",
    )
    
  • Dieser ist in der Anleitung nicht angegeben: In all deinen urls.py Dateien, aktualisieren Sie die urlpatterns!

    VOR:

    # client views
    urlpatterns += patterns("appname",
    ...
    )
    

    NACH DEM:

    # client views
    urlpatterns += patterns("projectname.apps.appname",
    ...
    )
    
  • Denken Sie zum Schluss daran, Ihre Änderungen durch einen Anruf zu aktualisieren python manage.py syncdb

Hoffnung, die geholfen hat.