Miałem problem z importem aplikacji w innej aplikacji w moim projekcie django. Wiem, że są różne pytania/asnwsers na ten temat, i wierz mi, czytam wiele z nich, nawet niektóre o import Pythona.Importowanie aplikacji w projekcie django
Oto mój projekt drzewo (będę umieścić prawdziwe nazwisko katalogów):
was/ # full path from my computer /home/user/project/was
....was/ #django project created by django-admin startproject 'was'
....manage.py
....artists/ #first app
....migrations/
....templates/
....__init__.py
....other_python_files.py
....crew/ #second app
....migrations/
....templates/
....__init__.py
....some_files.py
....was/ # folder containing settings.py, main urls.py
....__init__.py
Mój pierwszy był projekt (/ home/user/project/było) zawiera virtualenv generuje foldery (python3.4) .
Sprawdziłem na mojej ścieżce pythonowej sys.path
i mojej strukturze projektu w Pycharmie i tam jest/home/user/project/was.
Kiedy to zrobić w pycharm, mam autocompletion działa poprawnie:
from ..crew.models import MyClass #here i'm in a artists app file
Ale otrzymuję ValueError :attempted relative import beyond top-level package when import app
a teraz sam scenariusz, importowanie klasy załogi artystów aplikacji ale:
from was.crew.models import MyClass
Autouzupełnianie działa dobrze w pycharmie, ale tym razem dostałem klasyczny ImportError: no name was.crew
.
znajdę rozwiązanie robi to poprzez dodanie tej linii w moim settings.py:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(BASE_DIR)) # add this line
Zauważ, że BASE_DIR
już istnieją w ustawieniach. A teraz mogę to zrobić:
from crew.models import MyClass
I tu nie mam błąd (zmienić niektóre ustawienia w pycharm mieć prace autouzupełnianie).
To działa, ale naprawdę zastanawiam się, dlaczego muszę dodać tę linię i dlaczego moje dwie pierwsze próby nie działają.
Jestem trochę zagubiony w pakiecie, pythonpath itp. (To dlatego określiłem w moim schemacie wszystkie pliki __init__.py
).
Czy nie powinno być from ..anotherapp.models import Class
działa dobrze, nie pakując niczego w settings.py?
Niezależnie od tego, czy powinienem zachować swoje rozwiązanie, czy nie jest to dobre?
Z góry dziękuję za każdą odpowiedź.
PS: zauważ, że już próbowałem mieć pliki __init__.py
w moim pierwszym i drugim folderze, bez powodzenia.
błąd rzeczywiście wywołać kiedy uruchomić mój serwer i przejść do localhost. 8000. I tak to powinno działać (w rzeczywistości działa w pycharmie, przechwytuje moje drzewa aplikacji), ale django podnosi błąd. Czy to może być probl em z virtualenv python lib umieszczone zbyt wysoko w drzewie folderów? – Bestasttung
Jaki komunikat o błędzie dostałeś? – f43d65
te, które wrotte w moim pytaniu. Cokolwiek usunąć wpis z ścieżki Pythona i robi app1.models wydaje się działać bez mojego wiersza w ustawieniach. Dzięki za odpowiedź ! – Bestasttung