2

当我想看看我是否可以以更好的方式组织我的项目时,我的应用程序运行良好。我通读了有关构建 django 项目的教程。

之前我的项目结构如下:

  • 卡穆卡姆
    • 图书
      • 管理员.py
      • 模型.py
      • 视图.py
      • __init__.py
    • 静止的
    • 模板
    • 网址.py
    • 视图.py
    • 设置.py
    • wsgi.py
    • __init__.py

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

  • 卡穆卡姆
    • 应用
      • 图书
        • 管理员.py
        • 模型.py
        • 视图.py
        • __init__.py
    • 静止的
    • 模板
    • 网址.py
    • 视图.py
    • 设置.py
    • wsgi.py
    • __init__.py

然后我将views.py 和admin.py 中的导入从books.models 更改为apps.books.models。我还在INSTALLED_APPSsettings.py 中从 book 更改为 apps.books。

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

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

我在这里搞砸了什么,所以它再也找不到我的应用程序了?

4

2 回答 2

4

您的应用程序文件夹没有__init__.py文件,因此无法识别为 python 模块

于 2013-01-07T08:02:41.630 回答
4

按照相同的指南,我遇到了同样的错误,因为未引用以下列表的最后一点。确保您执行了以下更改:

  • 在应用程序文件夹中创建一个空白__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

希望有帮助。

于 2013-06-28T11:05:01.337 回答