Domanda

Sono davvero confuso da alcuni errori sto diventando come sto cercando di mettere un App in produzione.Tutto funziona bene sulla macchina di sviluppo, ma non posso syncdb o inserire il Django shell sul server di Produzione.Ricevo un errore quando forum.models.py si tenta di importare forum.managers.py perché i modelli non sono in lo spazio dei nomi di sicurezza.

Penso che potrebbe essere un PYTHONPATH problema, ma non è una strana Pollo o Uovo aspetto.Non capisco perché TagManager non è nello spazio dei nomi.
TagManager è importato tramite:
dal forum.i gestori di importazione *
Che viene eseguita prima la TagManager di classe è chiamato.

$ python2.5 manage.py syncdb
Traceback (ultima call last):
File "manage.py" la riga 11, in
execute_manager(impostazioni)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/gestione/init.py", linea 362, in execute_manager
il programma di utilità.execute()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/gestione/init.py", la linea 303, in esecuzione di
auto.fetch_command(comando).run_from_argv(self.argv)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 195, in run_from_argv
auto.execute(*args, **opzioni.dict)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 221, in esecuzione di
auto.validate()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/base.py" linea 249, in convalida
num_errors = get_validation_errors(s, app)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/core/management/validation.py", linea 28, in get_validation_errors
per (app_name, errore) in get_app_errors().gli articoli():
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py" linea 131, in get_app_errors
auto._populate()
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py", linea 58, in _populate
auto.load_app(app_name, True)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/db/models/loading.py" linea 74, in load_app
i modelli = import_module('.modelli', app_name)
Il File "/home/app_name/webapps/app_name/lib/python2.5/django/utils/importlib.py", la linea 35, in import_module
importazione(nome)
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", la linea 18, in
dal forum.i gestori di importazione *
Il File "/home/app_name/webapps/app_name/django_app/forum/managers.py", linea 6, in
dal forum.modelli di importazione *
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", linea 43, in
Tag di classe(modelli.Modello):
Il File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", linea 53, in Tag
oggetti = TagManager()
NameError:nome 'TagManager' non è definito

Python 2.5.4 (r254:67916, Aug  5 2009, 12:42:40)   
[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import os  
>>> os.environ['DJANGO_SETTINGS_MODULE'] = 'django_app.settings'  
>>>   
>>> import sys  
>>> import pprint  
>>> pprint.pprint(sys.path)  
['',  
 '/home/app_name/webapps/app_name/lib/python2.5',  
 '/home/app_name/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',  
 '/home/app_name/lib/python2.5/html5lib-0.11.1-py2.5.egg',  
 '/home/app_name/lib/python2.5',  
 '/usr/local/lib/python25.zip',  
 '/usr/local/lib/python2.5',  
 '/usr/local/lib/python2.5/plat-linux2',  
 '/usr/local/lib/python2.5/lib-tk',  
 '/usr/local/lib/python2.5/lib-dynload',  
 '/usr/local/lib/python2.5/site-packages',  
 '/usr/local/lib/python2.5/site-packages/PIL']  
>>> sys.path = ['/home/app_name/webapps/app_name/django_app','/home/app_name/webapps/app_name','/home/app_name/webapps/app_name/lib/python2.5'] + sys.path  
>>> pprint.pprint(sys.path)['/home/app_name/webapps/app_name/django_app',  
 '/home/app_name/webapps/app_name',  
 '/home/app_name/webapps/app_name/lib/python2.5',  
 '',  
 '/home/app_name/webapps/app_name/lib/python2.5',  
 '/home/app_name/lib/python2.5/markdown2-1.0.1.16-py2.5.egg',  
 '/home/app_name/lib/python2.5/html5lib-0.11.1-py2.5.egg',  
 '/home/app_name/lib/python2.5',  
 '/usr/local/lib/python25.zip',  
 '/usr/local/lib/python2.5',  
 '/usr/local/lib/python2.5/plat-linux2',  
 '/usr/local/lib/python2.5/lib-tk',  
 '/usr/local/lib/python2.5/lib-dynload',  
 '/usr/local/lib/python2.5/site-packages',  
 '/usr/local/lib/python2.5/site-packages/PIL']  
>>> from forum.managers import *  
Traceback (most recent call last):  
  File "<stdin>", line 1, in <module>  
  File "/home/app_name/webapps/app_name/django_app/forum/managers.py", line 6, in <module>  
    from forum.models import *  
  File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", line 43, in <module>  
    class Tag(models.Model):  
  File "/home/app_name/webapps/app_name/django_app/../django_app/forum/models.py", line 53, in Tag  
    objects = TagManager()  
NameError: name 'TagManager' is not defined  
>>> from forum.models import *  
>>> from forum.managers import *  
>>> objects = TagManager()  
>>> objects  
<forum.managers.TagManager object at 0x9b9fdac>  
>>>   
È stato utile?

Soluzione

Il tuo problema è che fai:

dal forum.i gestori di importazione * (riga 18 models.py) dal forum.modelli di importazione * (riga 6 managers.py)

Come è possibile che possa funzionare?Provare appiattimento questo non importa a mano, copia e incolla in un nuovo file) e vedrete il perché, dal momento in cui viene eseguita la riga "oggetti = TagManager()" non può avere eseguito la parte del manager di modulo in cui TagManager è definito, a meno che non è stato definito prima linea 18.

Alcuni consigli generali:

  1. Evitare l'importazione di ogni volta che si rende programmi python più difficile da leggere, se non altro)
  2. Se si dispone di circolare importazioni, ad esempio, provare a rompere il loro.Spesso in un modulo è possibile spostare l'importazione in una chiamata di funzione, o è possibile rielaborare alcuni elementi di un terzo modulo che sia in grado di importare dal.Si può anche provare a spostare l'importazione inferiore del modulo, che a volte funziona.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top