170

Django (1.5) 对我来说工作得很好,但是当我启动 Python 解释器 (Python 3) 来检查一些东西时,我在尝试导入时遇到了最奇怪的错误 - from django.contrib.auth.models import User-

Traceback (most recent call last):
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 36, in _setup
    settings_module = os.environ[ENVIRONMENT_VARIABLE]
  File "/usr/lib/python3.2/os.py", line 450, in __getitem__
    value = self._data[self.encodekey(key)]
KeyError: b'DJANGO_SETTINGS_MODULE'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.2/dist-packages/django/contrib/auth/models.py", line 8, in <module>
    from django.db import models
  File "/usr/local/lib/python3.2/dist-packages/django/db/__init__.py", line 11, in <module>
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/usr/local/lib/python3.2/dist-packages/django/conf/__init__.py", line 45, in _setup
    % (desc, ENVIRONMENT_VARIABLE))

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

当它在 Python 解释器之外正常工作时,它怎么可能配置不正确?在我的 Django 设置中,DATABASES设置为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'django_db', # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'zamphatta',
        'PASSWORD': 'mypassword91',
        'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '', # Set to empty string for default.
    }
}

...这是如何配置不正确的?

4

7 回答 7

266

你不能只启动 Python 并检查,Django 不知道你想从事什么项目。您必须执行以下操作之一:

  • 采用python manage.py shell
  • 使用django-admin.py shell --settings=mysite.settings(或您使用的任何设置模块)
  • DJANGO_SETTINGS_MODULE操作系统中的环境变量设置为mysite.settings
  • (这在 Django 1.6 中被删除)setup_environ在 python 解释器中使用:

    from django.core.management import setup_environ
    from mysite import settings
    
    setup_environ(settings)
    

当然,第一种方法是最简单的。

于 2013-03-21T19:42:18.123 回答
41

在你的 python shell/ipython 中做:

from django.conf import settings

settings.configure()
于 2015-07-11T02:01:56.260 回答
26

在 2017 年使用 django 1.11.5 和 python 3.6(从评论中这也适用于 Python 2.7):

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

您放置此代码的.py位置应位于mysite(父级)

于 2017-10-01T19:28:49.203 回答
12

在 Django 1.9 上,我尝试django-admin runserver并得到了同样的错误,但是当我使用时,python manage.py runserver我得到了预期的结果。这可能会解决很多人的这个错误!

于 2016-09-22T18:05:52.983 回答
4

就我而言,我在尝试通过 PyCharm 运行 Django 测试时得到了这个。我认为这是因为 PyCharm 没有加载初始的 Django 项目设置,即那些manage.py shell最初运行的设置。可以将它们添加到测试脚本的开头,或者只使用manage.py test.

版本:

  • Python 3.5(在 virtualenv 中)
  • PyCharm 2016.3.2 专业版
  • 姜戈 1.10
于 2017-01-12T21:02:07.303 回答
3

在我自己的情况下,在 python2.7.11 上运行的 django 1.10.1 中,我试图使用django-admin runserver而不是manage.py runserver在我的项目目录中启动服务器。

于 2016-09-17T20:42:54.840 回答
0

对于使用 IntelliJ 的人,通过这些设置,我可以从 shell(在 Windows 上)进行查询。

在此处输入图像描述

于 2019-10-21T07:42:57.520 回答