ImportError:无法导入名称 a_class
Posted
技术标签:
【中文标题】ImportError:无法导入名称 a_class【英文标题】:ImportError: cannot import name a_class 【发布时间】:2015-04-09 00:32:56 【问题描述】:我有一个 django 站点,托管在 pythonanywhere.com 上。在那个站点上,我可以创建一个 Bash 控制台或一个 iPython 控制台。
我希望能够做到这一点:
from my_module import a_class
a_class.object.all()
a_class.object.filter(some_attribute=True)
如果我尝试在 iPython 控制台中运行它,我会收到错误:ImportError: cannot import name a_class
解释可能很简单,我还在学习中……我找到的答案是关于第三方模块的,但这是我创建的,我不知道为什么它不能导入。如果我不执行from...import
,我会得到a_class
未定义的错误,正如预期的那样。
编辑
这是我的 settings.py 文件:
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accueil',
'a_class',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
ROOT_URLCONF = 'my_site.urls'
WSGI_APPLICATION = 'my_site.wsgi.application'
# Static files (CSS, javascript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
'/var/www/static/',
)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
我的目录结构是:
── a_class
│ ├── __init__.py
│ ├── admin.py
│ ├── forms.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── 0016_auto_20150407_0057.py
│ │ ├── __init__.py
│ ├── models.py
│ ├── templates
│ │ └── a_class
│ │ ├── home.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
├── my_site
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
【问题讨论】:
既然你提到了答案可能很简单:你的模块文件夹中有manditory__init__.py
文件吗?导入是否在非交互式 shell 中工作(如果是:你使用线程模块吗?)?该模块是否在 iPython 可以找到的某个地方(在应用程序文件夹/PYTHONPATH 中的某个地方)?
是的,init.py 在那里。我可以从网站的其他地方导入这些类,这能回答第二个问题吗? iPython 从项目的根文件夹中启动。
相对于您在此处显示的文件结构,my_module 在哪里?
我应该在我的帖子中提到我想要运行的命令,它们在 PyCharm 中运行良好。 GilesTomas 对以下答案的评论帮助我获得了所需的控制台。感谢您的帮助!
【参考方案1】:
类通常在模型中,有几种方法可以导入它们,首先:
from django.apps import apps
MyModel = apps.get_model('app_label', 'ModelName') # Both strings
如果它存储在 models.py 中,你也应该这样做
from myapp.models import Class # Make sure the app has an __init__.py to be seen
还要使用 ./manage shell,您需要安装并迁移应用程序。
【讨论】:
感谢您的回答。老实说,当您说需要安装和迁移应用程序时,我并不是您的意思。您的第一个解决方案给了我这个错误:AppRegistryNotReady: Models aren't loaded yet.
,而第二个解决方案给了我一个ImproperlyConfigured: Requested setting CACHES, but settings are not configured.
错误。 (是的,我的模型存储在 models.py 中)。希望它能澄清问题!
在 INSTALLED_APPS 下的 settings.py 中添加您的应用名称作为字符串。然后在 shell 中运行 ./manage.py makemigrations && ./manage.py migrate,如果你刚刚开始,请按照 Django polls 教程进行操作。 docs.djangoproject.com/en/1.8/intro/tutorial01
应用程序在 INSTALLED_APPS 中列出,之后我运行了这两个命令。
请发布您的 settings.py 和您的目录结构
只是为了确保您了解 Mikeec3 提到的特定内容——如果您想访问 Django 模型,您需要使用 ./manage.py shell
来启动 IPython。从 PythonAnywhere“控制台”页面启动的常规 IPython 控制台将不起作用,从 Bash 控制台运行“ipython”也不会。你需要启动一个 Bash 控制台,cd
到你的 Django 项目的根目录,然后运行 ./manage.py shell
。抱歉,如果您已经很清楚了,我只是认为它需要下划线。以上是关于ImportError:无法导入名称 a_class的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:无法导入名称“AFAVSignature”
ImportError:无法导入名称“评估”(来自意外导入评估)
Django 'ImportError: 无法导入名称 url'