#python #django
#python #django
Вопрос:
У меня есть следующая структура:
mysite
-> manage.py
-> mysite (again)
-> __init__.py
-> wsgi.py
-> settings.py
etc
-> myapp
-> __init__.py
-> myscript.py
-> models.py
etc
Когда я запускаю скрипт из myapp (который выполняет связанные с myapp действия, например, помещая данные в базу данных), мне нужно сделать
import django
django.setup()
для того, чтобы иметь возможность from models import MyModel
. Но если я сделаю это в каталоге myapp, я получу:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:Python27libsite-packagesdjango__init__.py", line 22, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File "C:Python27libsite-packagesdjangoconf__init__.py", line 53, in __getattr__
self._setup(name)
File "C:Python27libsite-packagesdjangoconf__init__.py", line 41, in _setup
self._wrapped = Settings(settings_module)
File "C:Python27libsite-packagesdjangoconf__init__.py", line 97, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "C:Python27libimportlib__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named mysite.settings
Что я вроде понимаю, поскольку он находится дальше по дереву каталогов, а не в том же каталоге, что и, например, manage.py
(корень, я полагаю?). Когда я запускаю интерпретатор python в mysite, где manage.py
находится, я не получаю эту ошибку.
Что я должен сделать, чтобы иметь возможность размещать свои скрипты в myapp и при этом иметь возможность использовать django.setup()
из этого каталога?
Комментарии:
1. Вы пытаетесь использовать ‘.’ перед from
models import MyModel
модели должны быть.models import MyModel
2. Если вы используете Django и вам нужно запустить некоторые сценарии в контексте вашего приложения, вам следует использовать команды управления: docs.djangoproject.com/en/1.10/howto/custom-management-commands
Ответ №1:
Вам нужно убедиться, что корень вашего проекта находится в пути python при запуске скрипта. Что-то вроде этого может помочь.
импортировать ОС импортировать систему projpath = os.path.dirname(__file__) sys.path.append(os.path.join(projpath, '..'))