【发布时间】:2015-07-13 14:02:46
【问题描述】:
这感觉像是没有人能够回答的问题之一,但无论如何我都会问它。我有一个 Django 1.6 项目,当我尝试通过 Django 开发服务器访问我的站点主页时,该项目引发了导入错误:
ImportError at /
No module named photo
错误发生在我的一个视图顶部的这一行:
# apps/photos/views.py
from classes.photo import Photo
这是堆栈跟踪:
Request Method: GET
Request URL: http://localhost:8000/
Django Version: 1.6.2
Python Version: 2.7.5
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'apps.admin',
'apps.account',
'apps.home',
'apps.members',
'apps.messages',
'apps.payment',
'apps.photos',
'apps.signin',
'apps.profile',
'scripts',
'apps.try',
'favicon',
'django_nose',
'django_extensions')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
101. resolver_match = resolver.resolve(request.path_info)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in resolve
318. for pattern in self.url_patterns:
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in url_patterns
346. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/core/urlresolvers.py" in urlconf_module
341. self._urlconf_module = import_module(self.urlconf_name)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
40. __import__(name)
File "/www/yearbook/conf/urls.py" in <module>
16. url(r'^photos/', include('apps.photos.urls')),
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/conf/urls/__init__.py" in include
26. urlconf_module = import_module(urlconf_module)
File "/Users/me/venv/yearbook/lib/python2.7/site-packages/django/utils/importlib.py" in import_module
40. __import__(name)
File "/www/yearbook/apps/photos/urls.py" in <module>
5. from apps.photos.views import ack_photos_uploaded
File "/www/yearbook/apps/photos/views.py" in <module>
11. from classes.photo import Photo
Exception Type: ImportError at /
Exception Value: No module named photo
通常这类问题很容易解决,但这个问题让我很困惑。我的“年鉴”项目中有许多应用程序,包括有问题的照片应用程序:
yearbook (Django project)
├── admin
├── apps (My various apps... see below)
├── bin
├── classes (photo.py in here)
├── conf (my settings.py and config files)
├── manage.py
├── scripts
├── static
└── templates
apps
├── __init__.py
├── __init__.pyc
├── account
├── home
├── members
├── messages
├── photos (<- problem occurs here)
├── profile
└── signin
classes/photo.py 是一个 Python 模块,它包含一个 Photo 类以及处理照片所需的各种实例、静态和类方法。我使用类而不是模型,因为我不需要在我的数据库中存储与照片相关的信息。
# classes/photo.py
class Photo:
# instance variables and various methods here
pass
此错误的奇怪之处在于,我可以将“from classes.photo import Photo”添加到我的任何其他应用程序的视图中,但我没有收到此错误。事实上,我的“管理员”和“个人资料”应用程序导入并广泛使用了照片模块的照片类。只有当我将它添加到我的照片 view.py 文件时才会发生这种情况。感觉像是某种名称冲突,但我不明白这是怎么回事,因为我的课程模块的路径是 /www/yearbook/classes/photo.py 但尝试导入它的视图在 /www/yearbook /apps/照片/views.py。 classes 和 apps/photos 目录中都有空的 __init__.py 文件。
有谁知道可能是什么问题?这尤其令人沮丧,因为这意味着我的照片管理应用程序无法使用我为支持管理照片而构建的照片类来处理照片。
谢谢!
【问题讨论】:
-
可能是循环依赖问题。 classes.photo 会导入 photos.views 吗?
-
这是个好主意,但是,不,classes.photo 不会导入 apps.photos.views。
-
从 yearbook.classes.photo 导入照片?
-
@AjayGupta 是的,我也试过了,但没有解决。
-
我认为这是一个循环导入问题
标签: django django-models django-views