/ / ImportError po przeniesieniu aplikacji do folderu zagnieżdżonego - django

ImportError po przeniesieniu aplikacji do zagnieżdżonego folderu - django

Moja aplikacja działała dobrze, gdy chciałem sprawdzić, czy mogę lepiej zorganizować swój projekt. Przeczytałem ten samouczek na temat strukturyzacji projektu django.

Przed moim projektem była następująca struktura:

  • camucamu
    • książki
      • admin.py
      • models.py
      • views.py
      • __init__.py
    • statyczny
    • szablony
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Chciałem przenieść aplikację książek do folderu aplikacji. Zrobiłem to i zmieniłem strukturę projektu na następującą:

  • camucamu
    • aplikacje
      • książki
        • admin.py
        • models.py
        • views.py
        • __init__.py
    • statyczny
    • szablony
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Następnie zmieniłem import w views.py i admin.py od books.models do apps.books.models. Też się zmieniłem INSTALLED_APPS w settings.py od książek do apps.books.

Gdy próbowałem następnie uruchomić syncdb, pojawia się następujący błąd:

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

Co ja tu robię, żeby nie mogła znaleźć mojej aplikacji?

Odpowiedzi:

4 dla odpowiedzi № 1

Twój folder aplikacji nie ma __init__.py plik, więc nie można go rozpoznać jako moduł python


1 dla odpowiedzi nr 2

Otrzymałem ten sam błąd, postępując zgodnie z tym samym przewodnikiem, ponieważ ostatni punkt poniższej listy nie był cytowany. Upewnij się, że wykonałeś następujące zmiany:

  • Utwórz puste miejsce __init__.py plik w folderze aplikacji (potrzebny, aby Python rozpoznał go jako pakiet)
  • Zaktualizuj instrukcje importu, gdziekolwiek odwołujesz się do zewnętrznej aplikacji:

    from projectname.apps.appname.models import YourModel, YourOtherModel
    
  • Wewnątrz settings.py edytować INSTALLED_APPS tak, że wygląda to tak:

    INSTALLED_APPS = (
    
    ...
    
    # apps
    "projectname.apps.appname1",
    "projectname.apps.appname2",
    )
    
  • Ten nie jest określony w przewodniku: W całym twoim urls.py pliki, zaktualizuj urlpatterns!

    PRZED:

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

    PO:

    # client views
    urlpatterns += patterns("projectname.apps.appname",
    ...
    )
    
  • Na koniec pamiętaj, aby zaktualizować zmiany, dzwoniąc python manage.py syncdb

Nadzieja, która pomogła.