2011-03-08 150 views
8

我在將新更新部署到我的網站時遇到了一個非常惱人的問題。我有兩個獨立的網站,而其中一個是開發版本。現在,當我想我更改應用到生產也不會因爲錯誤信息的工作:Django:無法導入名稱

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

不要緊,如果我刪除該應用程序,查看,類或模塊,因爲它會抱怨的其他模塊來代替。 LoginView IS在一個導入語句中定義。這些文件只是在另一個子域上運行的開發文件(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 

回答

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被導入。

+0

我有類似的問題,分期和生產環境。在第一次運行時,我會得到'''錯誤:無法導入名稱Cart'''。然後幾頁刷新後,一切開始工作。 沒有這樣的事情發生在生產上。 仍然存在的問題是,我不能在分期中運行./manage.py命令,因爲它不斷給我一個錯誤。 – kravc 2012-09-11 05:56:55

+0

嘗試刪除所有pyc文件 – 2015-05-31 10:24:19

+0

謝謝,您指出了我的確切情況。在我的模型中定義爲類變量的「reverse」url。我正在尋找循環進口產品,而不是其他奇怪的例子。剛剛救了我很多頭髮拉。 – Rebs 2015-11-26 03:55:37