【问题标题】:Django: cannot import nameDjango:无法导入名称
【发布时间】:2011-07-11 10:52:44
【问题描述】:

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

文件 "/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
import(name)

文件 "/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

【问题讨论】:

    标签: django import corruption


    【解决方案1】:

    您很可能在定义 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 导入,只是因为@987654329 这将永远不可能@ 将无限期地等待 myapp.views 被导入。

    【讨论】:

    • 我在暂存和生产环境中遇到了类似的问题。在第一次运行时,我得到Error: cannot import name Cart。然后在刷新几页后,一切都开始工作了。生产中不会发生类似的情况。问题仍然是我无法在 staging 上运行 ./manage.py 命令,因为它不断给我一个错误。
    • 尝试删除所有pyc文件
    • 谢谢,您指出了我的确切情况。 reverse url 在我的模型中定义为类变量。我正在寻找循环进口,而不是其他像这样的奇怪案例。只是为我省了很多头发。
    猜你喜欢
    • 2015-03-01
    • 2011-12-27
    • 2018-05-29
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多