【问题标题】:ImportError After Moving App to Nested Folder将应用程序移动到嵌套文件夹后的 ImportError
【发布时间】: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 文件只是引用了仍然在同一个地方的设置文件

标签: django


【解决方案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更新您的更改

希望有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多