/ / ImportError après le déplacement de l'application dans un dossier imbriqué - django

ImportError après le déplacement de l'application dans un dossier imbriqué - django

Mon application fonctionnait bien lorsque je voulais voir si je pouvais organiser mon projet d'une meilleure façon. J'ai lu ce tutoriel sur la structuration d'un projet django.

Avant ma structure de projet était la suivante:

  • camucamu
    • livres
      • admin.py
      • models.py
      • views.py
      • __init__.py
    • statique
    • des modèles
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Ce que je voulais faire était de déplacer l'application de livres dans un dossier d'applications. C'est ce que j'ai fait et modifié la structure du projet comme suit:

  • camucamu
    • applications
      • livres
        • admin.py
        • models.py
        • views.py
        • __init__.py
    • statique
    • des modèles
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

J'ai ensuite modifié les importations dans views.py et admin.py de books.models à apps.books.models. J'ai aussi changé INSTALLED_APPS dans settings.py de livres en applications.

Lorsque j'ai ensuite essayé d'exécuter syncdb, j'obtiens le message d'erreur suivant:

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

Qu'est-ce que je fous ici pour qu'il ne puisse plus trouver mon application?

Réponses:

4 pour la réponse № 1

Votre dossier d'applications n'a pas de __init__.py fichier afin qu'il ne puisse pas être reconnu en tant que module python


1 pour la réponse № 2

J'ai eu la même erreur, en suivant le même guide, car le dernier point de la liste suivante n'avait pas été cité. Assurez-vous d'avoir effectué les modifications suivantes:

  • Créer un blanc __init__.py fichier dans le dossier apps (nécessaire pour que python le reconnaisse comme un paquet)
  • Mettez à jour les instructions d'importation lorsque vous vous référez à une application externe:

    from projectname.apps.appname.models import YourModel, YourOtherModel
    
  • À l'intérieur settings.py modifier INSTALLED_APPS tel qu'il ressemble à ceci:

    INSTALLED_APPS = (
    
    ...
    
    # apps
    "projectname.apps.appname1",
    "projectname.apps.appname2",
    )
    
  • Celui-ci n'est pas spécifié dans le guide: Dans tous vos urls.py fichiers, mettez à jour le urlpatterns!

    AVANT:

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

    APRÈS:

    # client views
    urlpatterns += patterns("projectname.apps.appname",
    ...
    )
    
  • Enfin, n'oubliez pas de mettre à jour vos modifications en appelant python manage.py syncdb

J'espère que ça a aidé.