将App移动到嵌套文件夹后的ImportError

时间:2013-01-07 07:55:08

标签: django

当我想看看能否以更好的方式组织我的项目时,我的应用程序运行正常。我通读了这个教程on structuring a django project

在我的项目结构如下之前:

  • camucamu
    • 书籍
      • admin.py
      • models.py
      • views.py
      • __初始化__。PY
    • 静态
    • 模板
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __初始化__。PY

我想要做的是将图书应用程序移动到应用程序文件夹中。因此,我这样做并将项目结构更改为以下内容:

  • camucamu
    • 应用
      • 书籍
        • admin.py
        • models.py
        • views.py
        • __初始化__。PY
    • 静态
    • 模板
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __初始化__。PY

然后我更改了views.py和admin.py中的导入 从books.models到apps.books.models。 我还将settings.py中的INSTALLED_APPS从书籍更改为apps.books。

当我尝试运行syncdb时,出现以下错误:

raise ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError apps.books: No module named apps.books

我在这里乱搞什么,所以找不到我的应用了?

2 个答案:

答案 0 :(得分:4)

您的apps文件夹没有__init__.py文件,因此无法将其识别为python模块

答案 1 :(得分: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

  • 来更新您的更改

希望有所帮助。