2011-03-08 19 views
8

Acabo de encontrar un problema muy molesto al implementar nuevas actualizaciones en mi sitio web. Tengo dos sitios web separados, mientras que uno de ellos es una versión de desarrollo. Ahora cuando quiero aplicar mis cambios a la producción no va a funcionar gracias al mensaje de error:Django: no puedo importar el nombre

File "/usr/lib/python2.6/dist-packages/django/core/handlers/base.py", line 99, in get_response
request.path_info)

File "/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py", line 249, in resolve for pattern in self.url_patterns:

File "/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py", line 278, in _get_url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)

File "/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py", line 273, in _get_urlconf_module
self._urlconf_module = import_module(self.urlconf_name)

File "/usr/lib/python2.6/dist-packages/django/utils/importlib.py", line 35, in import_module
import(name)

File "/srv/websites/spelutveckla_se/urls.py", line 21, in
(r'^account/login/$', LoginView.as_view()),

NameError: name 'LoginView' is not defined

No importa si me quito esa aplicación, la vista, la clase o módulo, ya que se quejan de una otro módulo en su lugar. LoginView IS se define en una declaración de importación. Los archivos son solo una copia nueva de los archivos de desarrollo (excepto para settings.py) que se ejecuta en otro subdominio sin ningún problema. Revisé el archivo settings.py varias veces y me aseguré de que se establecieran las configuraciones correctas (difiere en un par de rutas de directorio). También verifiqué que el usuario de apache2 www-data tenga permiso para acceder a los archivos. También reinicié Apache un par de veces y volví a copiar los archivos una y otra vez, pero nada funciona.

Estoy desesperado y no tengo idea de cuál podría ser el problema ...?

Esto es lo que mi urls.py parece que en la parte superior:

from django.conf.urls.defaults import * 
from django.conf import settings 
from django.views.generic import DetailView, ListView, TemplateView 
from django.contrib import admin 
from project.models import Project 
from project.views import Detail, EditView as EditProject, CreateProjectView, EditProjectLinksView, EditProjectFeedsView, EditProjectTagsView, EditMultimediaView, PostForumTopic, AudioFormset 
from frontpage.views import FrontpageView 
from userprofile.views import UserRegistrationView, UserRegistrationActivationView, LogoutView, UserProfileView, LoginView, EditProfileView, CreateUserProfileView 
from registration.views import activate as UserActivatedView 

Respuesta

22

Lo más probable tenían una importación circular en el módulo de LoginView se define en, es decir, cuando se estaban importando el módulo views que define LoginView, algunas afirmaciones de alguna manera, a su vez, importaron algún otro módulo que todavía estaba esperando ser interpretado por completo.

He aquí un ejemplo para darle una mejor idea:

# myapp.urls 

from django.conf.urls.defaults import * 
from myapp import views 

urlpatterns = patterns('', 
    # ... 
) 

# myapp.views 

from django.core.urlresolvers import reverse 
from django.views.generic.edit import CreateView 

class SomeCreateView(CreateView): 

    # BOOM! 
    success_url = reverse('myapp:some-url') 

Una vez myapp.views se importa y el tipo SomeCreateView consigue asignado a la memoria, reverse('myapp:some-url') obtendrá ejecutado y su myapp.urls eventualmente serán importadas por Django sólo eso, eso nunca será posible ya que myapp.urls esperará indefinidamente a que myapp.views se importe.

+0

Tengo un problema similar con el envío por etapas y producción. En la etapa de la primera ejecución, obtengo '' 'Error: no puedo importar el nombre del carro'''. Luego, después de actualizar algunas páginas, todo comienza a funcionar. Nada de eso ocurre en la producción. Todavía el problema es que no puedo ejecutar el comando ./manage.py en la puesta en escena ya que constantemente me da un error. – kravc

+0

intente eliminar todo el archivo pyc –

+0

Gracias, señaló el caso exacto que tuve. Una URL 'inversa' definida como una variable de clase en mis modelos. Estaba buscando importaciones circulares, no otros casos raros como este. Me salvó un montón de cabello. – Rebs

Cuestiones relacionadas