菜鸟问题:如何从python脚本中添加DJANGO_SETTINGS_MODULE?

时间:2019-03-21 08:18:10

标签: python django django-settings

对一个基本问题的道歉,但老实说,即使我确定这是一个简单的解决方法,我仍然没有找到可行的答案。

我正在从完全不同的工作目录中的命令行调用python文件,该文件是Django应用程序的一部分(与模型,视图相同的文件夹)。 python文件称为模块而不是包,因为我没有使用“ -m”参数。 python文件从模型文件导入,通过 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\'

如何表达Django项目中已经存在的settings.py文件的路径?我在Windows 10 FYI上使用Django 2.1。

使用项目文件结构更新:

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与manage.py在同一目录中,因此很容易将其声明为“ project1folder.settings”。如何在script.py中声明django_settings_module,以便script.py可以继续正常运行,就像我从Django应用程序中调用它一样?

2 个答案:

答案 0 :(得分:0)

我建议您使用以下命令:

python manage.py shell

假设您要在views.py文件中调用“ foo”函数。

您可以在提示符下输入:

>> from myapp.views import foo

>>foo()

答案 1 :(得分:0)

您可以将django项目的路径插入sys.path中,例如在Windows上:

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

从此处,您可以指定设置文件的虚线路径,例如:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "yourapp.settings")
django.setup()