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
- książki
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
- książki
- statyczny
- szablony
- urls.py
- views.py
- settings.py
- wsgi.py
- __init__.py
- aplikacje
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 № 1Twó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, zaktualizujurlpatterns
!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.