Django (1.5) działa dla mnie dobrze, ale kiedy uruchamiam interpreter Pythona (Python 3), aby sprawdzić niektóre rzeczy, pojawia się najdziwniejszy błąd, gdy próbuję importować - 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.
Jak można to nieprawidłowo skonfigurować, skoro działa dobrze poza interpreterem Pythona? W moich ustawieniach Django DATABASES
są następujące ustawienia:
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.
}
}
... jak to jest nieprawidłowo skonfigurowane?
unset DJANGO_SETTINGS_MODULE
.Odpowiedzi:
Nie możesz po prostu odpalić Pythona i sprawdzić rzeczy, Django nie wie, nad jakim projektem chcesz pracować. Musisz zrobić jedną z następujących rzeczy:
python manage.py shell
django-admin.py shell --settings=mysite.settings
(lub dowolnego modułu ustawień, którego używasz)DJANGO_SETTINGS_MODULE
zmienną środowiskową w systemie operacyjnym namysite.settings
(Zostało to usunięte w Django 1.6) Użyj
setup_environ
w interpreterze Pythona:Oczywiście pierwszy sposób jest najłatwiejszy.
źródło
setup_environ
zostało usunięte w wersji 1.6, ale--settings
powinno działać. Czy jesteś pewien, że twoje ustawienia są dalejFirstBlog.settings
, a nie tylko wsettings
bieżącym katalogu?$ export DJANGO_SETTINGS_MODULE="my_project.settings"
DJANGO_SETTINGS_MODULE=(project directory name).settings
W swojej powłoce Pythona / ipython wykonaj:
źródło
Apps aren't loaded yet.
W 2017 z django 1.11.5 i pythonem 3.6 ( z komentarza działa to również z Pythonem 2.7 ):
Kod,
.py
w którym umieścisz ten kod, powinien znajdować sięmysite
(nadrzędny)źródło
.py
powinien być umieszczony na korzenia , co oznacza, że wraz z manage.py. Jak umieścić go w losowych folderach?if __name__ == "__main__":
, jak to nie będzie działać poprawnie :)W Django 1.9 próbowałem
django-admin runserver
i otrzymałem ten sam błąd, ale kiedy użyłempython manage.py runserver
, otrzymałem zamierzony wynik. To może rozwiązać ten błąd dla wielu ludzi!źródło
W moim przypadku otrzymałem to, próbując uruchomić testy Django przez PyCharm. Myślę, że dzieje się tak, ponieważ PyCharm nie ładuje początkowych ustawień projektu Django, tj. Tych, które są
manage.py shell
uruchamiane początkowo. Można je dodać na początek skryptu testującego lub po prostu uruchomić testy za pomocąmanage.py test
.Wersje:
źródło
w moim przypadku w django 1.10.1 działającym na pythonie 2.7.11 próbowałem uruchomić serwer używając
django-admin runserver
zamiastmanage.py runserver
w katalogu mojego projektu.źródło
Dla osób używających IntelliJ, przy tych ustawieniach mogłem zapytać z powłoki (w Windows).
źródło