нубский вопрос: как мне добавить DJANGO_SETTINGS_MODULE из скрипта python? - PullRequest
0 голосов
/ 21 марта 2019

Извиняюсь за основной вопрос, но я, честно говоря, еще не нашел действенного ответа, хотя я уверен, что это простое решение.

Я звоню в файл python, который является частью Djangoприложение (та же папка, что и у моделей, видов и т. д.) из командной строки, из совершенно другого рабочего каталога.Файл python называется модулем, а не пакетом, поскольку я не использую аргумент "-m".Файл python импортируется из файла моделей, после чего я получаю длинный Traceback через файлы init и т. Д., Заканчивающийся ошибкой ниже:

django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

Поэтому я добавляю следующую строкув файле python перед оператором from models import modelA, modelB:

import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', "C:/Users/oktested/further_file_path/settings")

В основном я помещаю туда полный путь к файлу settings.py без расширения .py.Но после этого я получаю ModuleNotFoundError: No module named 'C:\Users\oktested\'.

Как мне указать путь к файлу settings.py, который уже существует в моем проекте Django?Я использую Django 2.1 в Windows 10 к сведению.

Обновление со структурой файла проекта:

project1/
  db
  manage.py
  MyAppFolder/
      __init__.py
      models.py
      views.py
      script.py
  project1folder/
      settings.py
      __init__.py

script.py - это файл, который мне нужно вызывать извне, и settings.pyэто файл настроек.В manage.py django_settings_module легко объявляется как 'project1folder.settings', поскольку он находится в том же каталоге, что и manage.py.Как мне объявить django_settings_module в script.py, чтобы script.py продолжал вести себя нормально, как если бы я вызывал его из приложения Django?

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Вы можете вставить путь к проекту django в sys.path, например в Windows:

sys.path.insert(1, r'C:\your\path\djangoproject')

Оттуда вы можете указать пунктирный путь к файлу настроек, например ::

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourapp.settings")
django.setup()
0 голосов
/ 21 марта 2019

Я бы предложил вам использовать команду:

python manage.py shell

Предположим, вы хотите вызвать функцию "foo" в файле views.py.

Youможет написать в приглашении:

>> from myapp.views import foo

>>foo()

...