Ho riscontrato un problema con un'importazione di un'app in un'altra app nel mio progetto django. So che ci sono diverse domande/domande su questo argomento, e credetemi ne ho letto molte, anche alcune sull'importazione di python.Importazione app nel progetto django
Ecco il mio albero del progetto (mi metterò vero nome cartelle):
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
Il mio primo è stato progetto (/ home/utente/progetto/era) contiene il virtualenv genera cartelle (python3.4) .
Ho controllato il mio percorso Python sys.path
e la mia struttura di progetto in Pycharm e c'è/home/user/project/was.
Quando faccio questo PyCharm, ho il completamento automatico che funziona benissimo:
from ..crew.models import MyClass #here i'm in a artists app file
ma ottengo un ValueError :attempted relative import beyond top-level package when import app
E ora, stesso scenario, l'importazione di una classe equipaggio artisti app, ma:
from was.crew.models import MyClass
Il completamento automatico funziona bene in pycharm ma questa volta ho ottenuto il classico ImportError: no name was.crew
.
trovo una soluzione di farlo con l'aggiunta di questa linea nella mia 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
Nota che BASE_DIR
già esistono nelle impostazioni. E ora posso fare questo:
from crew.models import MyClass
E qui ho avuto alcun errore (modificare alcune impostazioni in PyCharm di avere le opere completamento automatico).
Questo funziona, ma mi chiedo davvero perché devo aggiungere questa linea e perché i miei primi due tentativi non funzionano.
Sono un po 'perso con il pacchetto, pythonpath etc (è per questo che ho specificato nello schema tutti i file __init__.py
).
Non dovrebbe from ..anotherapp.models import Class
funzionare correttamente senza dover rovinare nulla in settings.py?
In ogni caso, dovrei mantenere la mia soluzione o non è una buona cosa?
Grazie in anticipo per qualsiasi risposta.
PS: nota che ho già provato ad avere i file __init__.py
nella mia prima e seconda cartella, senza successo.
l'errore in realtà innescano quando lancio il mio server et vado a localhost:. 8000. E sì, dovrebbe funzionare (effettivamente funziona in pycharm, riporta i miei alberi app) ma django genera errori. Potrebbe essere un probl em con lib virtualenv python posto troppo in alto nell'albero delle cartelle? – Bestasttung
Che messaggio di errore ricevi? – f43d65
quelli che ho scritto nella mia domanda. Qualunque cosa rimuova la voce dal percorso python e facendo app1.models sembra funzionare senza la mia linea nelle impostazioni. Grazie per la tua risposta ! – Bestasttung