将应用程序移动到嵌套文件夹后的 ImportError
Posted
技术标签:
【中文标题】将应用程序移动到嵌套文件夹后的 ImportError【英文标题】:ImportError After Moving App to Nested Folder 【发布时间】:2012-12-20 22:42:02 【问题描述】:当我想看看能否以更好的方式组织我的项目时,我的应用程序运行良好。我通读了本教程on structuring a django project。
之前我的项目结构如下:
卡木卡木 书籍 admin.py models.py views.py __init__.py 静态 模板 urls.py views.py settings.py wsgi.py __init__.py我想要做的是将书籍应用程序移动到应用程序文件夹中。因此我这样做并将项目结构更改为以下内容:
卡木卡木 应用程序 书籍 admin.py models.py views.py __init__.py 静态 模板 urls.py views.py settings.py wsgi.py __init__.py然后我更改了 views.py 和 admin.py 中的导入
从books.models 到apps.books.models。
我还将settings.py 中的INSTALLED_APPS
从books 更改为apps.books。
当我尝试运行 syncdb 时,我收到以下错误:
raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError apps.books: No module named apps.books
我在这里搞砸了什么,所以它再也找不到我的应用程序了?
【问题讨论】:
manage.py
中的路径改了吗?
@Ahsan 为什么我需要这样做? manage.py 文件只是引用了仍然在同一个地方的设置文件
【参考方案1】:
您的应用程序文件夹没有 __init__.py
文件,因此无法识别为 python 模块
【讨论】:
好点,虽然我只是将 _init_.py 文件添加到应用程序文件夹中,但仍然出现相同的错误。 如果不是 django 开发服务器,重新启动它可能会有所帮助,但我仍然想知道为什么 syncdb 会拒绝工作【参考方案2】:按照相同的指南,我遇到了同样的错误,因为未引用以下列表的最后一点。确保您执行了以下更改:
在apps文件夹中创建一个空白__init__.py
文件(python需要将其识别为一个包)
在您引用外部应用程序的任何地方更新导入语句:
from projectname.apps.appname.models import YourModel, YourOtherModel
在settings.py
内部编辑INSTALLED_APPS
使其看起来像这样:
INSTALLED_APPS = (
...
# apps
'projectname.apps.appname1',
'projectname.apps.appname2',
)
这个没有在指南中指定:在你所有的urls.py
文件中,更新urlpatterns
!
之前:
# client views
urlpatterns += patterns('appname',
...
)
之后:
# client views
urlpatterns += patterns('projectname.apps.appname',
...
)
最后记得致电python manage.py syncdb
更新您的更改
希望有所帮助。
【讨论】:
以上是关于将应用程序移动到嵌套文件夹后的 ImportError的主要内容,如果未能解决你的问题,请参考以下文章
将 PDFS 转换为 JPEGS 并将转换后的 jpeg 移动到它们各自的子文件夹中