首页 文章

Django:无法导入名称

提问于
浏览
8

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

文件“/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 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 import(name)文件“/ srv / websites / spelutveckla_se / urls中 . py“,第21行,在(r'^ account / login / $',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 回答

  • 22

    您很可能在模块 LoginView 中定义了循环导入,即当您导入定义 LoginViewviews 模块时,某些语句会以某种方式导入一些仍在等待完全解释的其他模块 .

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

    # 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') 将被执行,你的 myapp.urls 将最终由Django导入,只有那是不可能的,因为 myapp.urls 将无限期地等待 myapp.views 被导入 .

相关问题