正确设置Windows上的DJANGO_SETTINGS_MODULE

时间:2012-10-12 07:29:39

标签: django windows environment-variables

这个查询有我的帖子,但大部分都是针对linux的。他们都没有明显地为Windows

在我的应用程序中我正在设置数据库(sqlite3,Django中的默认值)。编辑我的应用程序(mysite)的setting.py文件后

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'D:/Django_Code/sqlite.db',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

发现我必须设置DJANGO_SETTINGS_MODULE环境,以便Django可以了解数据库设置。所以我把它设置为

DJANGO_SETTINGS_MODULE = "D:\Django_Code\mysite\mysite\settings.py"

在我发出

时交叉检查数据库设置
>>> from django.db import connection
>>> cursor = connection.cursor()

它说DJANGO_SETTINGS_MODULE环境变量是Undefined。

需要帮助才能正确设置DJANGO_SETTINGS_MODULE。

1 个答案:

答案 0 :(得分:6)

在Windows中设置DJANGO_SETTINGS_MODULE的最简单方法是在命令提示符下使用set命令。您还应该能够通过系统属性进行设置,但是您需要关闭并重新打开命令提示符才能使更改生效。

您也可以使用DJANGO_SETTINGS_MODULE命令查询set的当前值:

C:\temp\testproject> set DJANGO_SETTINGS_MODULE

此外,您需要将其设置为python模块名称not the filename(将其设置为文件名会产生类似于“无法导入设置”的错误C:\ temp \ testproject \ settings.py'(是否在sys.path上?):不支持按文件名导入。“)

例如,

C:\temp\testproject> set DJANGO_SETTINGS_MODULE=testproject.settings

然后你可以运行python并导入模块。

>>> import sys
>>> sys.path += ['C:\\temp']
>>> from django.db import connection
>>> connection.cursor()
<django.db.backends.util.CursorDebugWrapper object at 0x02C7F0B0>

请注意,我们还明确地将包含django项目(在本例中为testproject)的目录添加到sys.path,这实际上是Python查找模块的目录列表。这是必要的,因为Python将设置文件导入为python模块,而不是文件(如前所述)。

如果您希望交互式shell使用Django对象,则可以使用shell management command。在Django项目目录中,运行以下命令:

manage.py shell

由于你在Windows上,你可能必须这样做

python manage.py shell

相反,因为我个人遇到过python脚本没有接收命令行参数的问题。

C:\temp\testproject> python manage.py shell

In [1]: from django.db import connection

In [2]: connection.cursor()
Out[2]: <django.db.backends.util.CursorDebugWrapper at 0x33a0bd0>

(注意我安装了IPython并且Django很聪明并使用它;如果你没有安装IPython,你的shell看起来会略有不同。)

如果您想使用Django 运行脚本,最简单的方法是write a custom management command,然后您可以使用manage.py的参数运行。