2009-07-05 11 views
8

Mam projekt Django, który wydawał się działać całkiem dobrze z settings.py, który również bez problemu zaimportował plik local_settings.py.Problem z importowaniem plików w Django settings.py

Mam teraz dodaje następujące linie na końcu pliku ustawień:

try: 
    from extras import * 
except ImportError, e: 
    print "import extras failed :: " + `e` 

extras.py jest plik z dodatkowymi informacjami o konfiguracji siedzi w tym samym katalogu co settings.py i local_settings.py jednak mam teraz coraz:

import extras failed :: ImportError('Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.',) 

wydaje się to być spowodowane mnie próbuje

from django.contrib.auth.models import User,UserManager 
from django.db import models 

w tym pliku extras.py.

Ktoś ma jakieś pomysły?

okrzyki

Odpowiedz

17

zazwyczaj z przewodem jak

from django.db import models 

w settings.py będzie prowadzić do kołowego zależności. Powoduje to błąd importu, który jest zgłaszany nieco inaczej w różnych wersjach Django. Na przykład, jeśli dodać tę linię do działającej instalacji Django i wywołać „manage.py shell”, otrzymuję:

Error: Can't find the file 'settings.py' in the directory containing './manage.py'. It appears you've customized things. You'll have to run django-admin.py, passing it your settings module. (If the file settings.py does indeed exist, it's causing an ImportError somehow.)

Jeśli usunąć tę linię, wszystko jest w porządku ponownie.

Powodem jest to, że ładowanie modelu maszyny Django (znajduje się w opakowaniu) django.db.models importu settings.py, odczytuje jego INSTALLED_APPS aby zobaczyć, co aplikacje powinny być zainstalowane, a następnie wczytuje te aplikacje. (Można to potwierdzić, dodając oświadczenie wydruku do __init__.py dla jednego z zainstalowanych aplikacji.)

Jeśli spróbujesz importować django.db rzeczy w settings.py, że doprowadzi do okrągłej uzależnienia od importu i związane z modelem błędzie ImportError.

Jednym z rozwiązań jest przeniesienie funkcjonalności, która wymaga problematycznych importów (i samych importów) do aplikacji.

+2

+1 Ogólną zasadą nigdy nie jest importowanie niczego z Django w settings.py. –

+0

Zobacz tutaj, aby uzyskać szczegółowe informacje: http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html – dhill

3

Więc jak to DJANGO_SETTINGS_MODULE zestaw w swoim otoczeniu? Może to być albo wynik niejawnego importu ustawień, które powodują inne zagnieżdżone importowanie podczas importowania ustawień, "zależność cykliczna", która może mieć kilka nieprzyjemnych efektów (chociaż nie wierzę, że miałaby konkretną, którą obserwujesz, więc pochylam się nad pierwszą hipotezą).

Powiązane problemy