2009-07-05 12 views
8

Ho un progetto Django che sembra funzionare piuttosto bene con settings.py, che ha anche importato un local_settings.py senza problemi.Problema durante l'importazione di file in Django settings.py

ora ho aggiunto le seguenti righe alla fine del file di impostazioni:

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

extras.py è un file di informazioni di configurazione aggiuntiva seduto nella stessa directory di settings.py e local_settings.py , tuttavia, ora sto ricevendo:

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

Questo sembra essere dovuto a me cercando di

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

nel file extras.py.

Qualcuno ha qualche idea?

applausi

risposta

17

Tipicamente, avente una linea come

from django.db import models 

in settings.pysarà portare ad una dipendenza circolare. Ciò causa un errore di importazione, che viene segnalato in modo leggermente diverso nelle diverse versioni di Django. Ad esempio, se aggiungo che la linea ad una configurazione Django di lavoro e invoco "guscio manage.py", ottengo:

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

Se rimuovo che la linea, va tutto bene ancora una volta.

La ragione è che le macchine modello di carico di Django (che si trova nelle django.db.models pacchetto) importazioni settings.py, legge il suo INSTALLED_APPS per vedere quali devono essere installati applicazioni, e quindi carica quelle applicazioni. (È possibile confermare questo con l'aggiunta di una dichiarazione di stampa per __init__.py per una delle tue applicazioni installate.)

Se si tenta di importare django.db roba in settings.py, che porterà ad una dipendenza dalle importazioni circolare ed un messaggio di errore -related ImportError.

Una soluzione è spostare la funzionalità che richiede le importazioni problematiche (e le importazioni stesse) in un'app.

+2

+1 La regola generale è di non importare mai nulla da Django in settings.py. –

+0

Vedi qui, per dettagli: http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html – dhill

3

Così come è DJANGO_SETTINGS_MODULE insieme nel proprio ambiente? Potrebbe essere o quello, o il risultato dell'importazione implicita di impostazioni che stanno causando le altre importazioni nidificate mentre vengono importate le impostazioni, una "dipendenza circolare" che può avere diversi effetti sgradevoli (anche se non credo che avrebbe il quello specifico che stai osservando, quindi mi appoggio alla prima ipotesi).

Problemi correlati