2013-03-21 3 views
132

Django (1.5) отлично подходит для меня, но когда я запускаю интерпретатор Python (Python 3), чтобы проверить некоторые вещи, я получаю самую странную ошибку при попытке импортировать - from django.contrib.auth.models import User -Ошибка конфигурации Django DB «Неправильно настроенная»

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. 
    } 
} 

... как это неправильно настроен?

+0

Пришел к созданию нового проекта. Я счел полезным сделать 'unset DJANGO_SETTINGS_MODULE'. Я столкнулся с проблемой, когда я установил env var в моем .bashrc – fncomp

ответ

214

Вы не можете просто запускать 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) 
    

Естественно, первый способ - самый простой.

+0

Спасибо!Это было не совсем ясно для меня в документации, или, может быть, я прочитал ее и забыл к тому времени, когда мне это нужно. – Zamphatta

+6

Как ни странно, он не может найти файл mysite.settings, но я вижу, что он сидит прямо там как mysite/settings.py. Тьфу! Я начинаю ненавидеть Django. – Zamphatta

+0

совершенно странно для меня тоже, потому что функция имеет какой-то статический functionallaty, поэтому зачем настраивать эти настройки ... – Dukeatcoding

30

В вашем питона оболочки/IPython сделать:

from django.conf import settings 

settings.configure() 
2

в моем случае в Джанго 1.10.1 работает на python2.7.11, я пытался запустить сервер с помощью django-admin runserver вместо manage.py runserver в моей директории проекта ,

7

На Django 1.9 я попробовал django-admin runningerver и получил ту же ошибку, но когда я использовал «python manage.py runningerver», я получил предполагаемый результат. Это может решить эту ошибку для многих людей!

+0

же, на django 1.10, но при попытке запустить команду loaddata – amchugh89

2

В моем случае я получил это при попытке запуска тестов Django через PyCharm. Я думаю, что это связано с тем, что PyCharm не загружает начальные настройки проекта Django, то есть те, которые начались с manage.py shell. Можно добавить их в начало сценария тестирования или просто запустить тесты с помощью manage.py test.

Версии:

  • Python 3.5 (в virtualenv)
  • PyCharm 2016.3.2 Professional
  • Джанго 1,10
7

В 2017 году с Джанго 1.11.5 и питона 3.6:

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

.py, в который вы помещаете этот код, должен быть в mysite (родительский)

+0

это, похоже, работает для меня, спасибо – AbdulHamid