manage.py - 不在项目文件夹中?

时间:2013-02-27 21:41:18

标签: django django-admin django-manage.py manage.py

我第一次尝试使用Django,我正在尝试跟随django团队提供的the tutorial

在我创建了一个新项目之后,我获得了以下文件夹/文件结构,就像教程说我应该:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

当我创建应用程序时,我运行:

python manage.py startapp polls

...在manage.py文件所在的文件夹中创建应用程序'polls' - 这给了我:

mysite/
    manage.py
    polls/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

这意味着我创建的应用程序是在我的项目文件夹之外创建的,当然不应该是这种情况。我试图将manage.py移到项目文件夹中。但是,当我这样做并运行时:

python manage.py syncdb

...我收到以下错误:

raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" %     (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'testproject.settings' (Is it on sys.path?): No     module named testproject.settings

我想我可以手动将应用程序移动到项目文件夹,但这是我不应该做的。

所以,教程中的某些内容是错误的(我很难相信),或者我在这里遗漏了一些东西(更有可能)。

提前致谢。

3 个答案:

答案 0 :(得分:7)

这是新的正确布局。 “mysite / mysite”是一个应用程序,“mysite / polls”是一个应用程序。 “mysite”父文件夹是您的项目文件夹。

答案 1 :(得分:3)

@holyredbeard这是正确的布局你在阅读旧文档吗?

有用的阅读:http://www.tdd-django-tutorial.com/blog/articles/2012/tutorials-updated-django-14-and-its-weird-new-fold/

不要移动应该位于应用程序和项目文件夹之外的manage.py。

自1.4常见布局示例...

project_root/
   project_name/
       media/
       static/
       static_root/ (in production)
       templates/some_app/foo.html (overriding some_app at project level)
                /admin/some_app/some_model/change_list.html
                (overriding admin changelist for some_app.models.some_model)
       settings.py
       settings_deployment.py
       urls.py
   some_app/
       templates/some_app/foo.html
       urls.py
       views.py
       models.py
   manage.py

答案 2 :(得分:1)

这是自版本1.4以来的官方布局。

发布说明中详细解释了背后的基本原理: https://docs.djangoproject.com/en/dev/releases/1.4/#updated-default-project-layout-and-manage-py

不要移动manage.py。一般来说,你可以期待Django自己的脚本总是做正确的事情,你永远不需要移动任何文件只是为了让它工作。