Django:无法导入名称

时间:2011-03-08 21:39:32

标签: django import corruption

我在为我的网站部署新更新时遇到了一个非常烦人的问题。我有两个单独的网站,而其中一个是开发版本。现在,当我想将我的更改应用于生产时,由于错误消息,它将无法工作:

  

文件   “/usr/lib/python2.6/dist-packages/django/core/handlers/base.py”   第99行,在get_response中   request.path_info)

     

文件   “/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py”   第249行,解决模式问题   self.url_patterns:

     

文件   “/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py”   第278行,在_get_url_patterns中   模式=   GETATTR(self.urlconf_module,   “urlpatterns”,self.urlconf_module)

     

文件   “/usr/lib/python2.6/dist-packages/django/core/urlresolvers.py”   第273行,在_get_urlconf_module中   self._urlconf_module =   import_module(self.urlconf_name)

     

文件   “/usr/lib/python2.6/dist-packages/django/utils/importlib.py”   第35行,在import_module中   导入(名称)

     

文件   “/srv/websites/spelutveckla_se/urls.py”   第21行,在   (R '^帐户/登录/ $',   LoginView.as_view()),

     

NameError:名称'LoginView'不是   定义

如果我删除该应用,视图,类或模块并不重要,因为它会抱怨其他模块。 LoginView是在import语句中定义的。这些文件只是在另一个子域上运行的开发文件的新副本(settings.py除外)没有任何问题。我已经多次检查settings.py并确保设置了正确的设置(因几个目录路径而异)。我还检查过apache2 www-data用户是否有权访问这些文件。我也重新启动了apache几次并反复重复复制文件,但没有任何作用。

我很绝望,不知道问题可能是什么......?

这是我的urls.py在顶部的样子:

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

1 个答案:

答案 0 :(得分:22)

您很可能在模块LoginView中定义了循环导入,即当您导入定义views的{​​{1}}模块时,某些语句会以某种方式反过来导入其他一些仍在等待完全解释的模块。

这是一个给你一个更好主意的例子:

LoginView

导入# 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') 并将myapp.views类型分配给内存后,SomeCreateView将被执行,而reverse('myapp:some-url')最终将由Django导入,只有赢得永远不可能,因为myapp.urls将无限期地等待myapp.urls导入。