4

我开始在 Django 示例项目中创建,第一个命令:

django-admin.py startproject test

给我:

- root
  - test
    - __init__.py 
    - settings.py 
    - urls.py 
    - wsgi.py 
    - manage.py

现在我创建第一个应用程序:

python manage.py startapp foo

它为我创建了文件夹root/foo

所以我应该如何理解我的root/test文件夹。这个文件夹用于我的项目的全局配置,仅此而已?(类似于 Symfony 2 应用程序文件夹)

我很困惑,因为 Django 文档告诉:

内部 mysite/ 目录是您项目的实际 Python 包

manage.py startapp foo在根目录下创建应用程序,而不是在root/test(mysite 等效项)下

[编辑]

两个命令:

python manage.py startapp app

和:

django-admin.py startapp app

在项目根目录中给我应用程序,而不是在root/name_of_generated_project

姜戈 1.4

[编辑] 2

对不起伙计们,我的错,现在一切正常。

[编辑] 3

我想再次创建另一个项目:

django-admin.py startproject jobeet

我的初始结构与上面类似。

现在我想尝试创建应用程序(在 jobeet 文件夹内):

django-admin.py startapp jobs

我最终jobeet/jobs没有jobeet/jobeet/jobs

再次 :/

所以在我的项目根目录中,我有:

- jobeet
- jobs
- manage.py

另一个命令:

python manage.py startapp app

给我同样的结果

4

3 回答 3

8

因此,假设您创建了一个新的 Django 项目testproject

django-admin.py startproject testproject

这将创建一个具有以下最小文件集的新项目:

testproject/
├── __init__.py
├── manage.py
├── settings.py
└── urls.py

要为您的第一个站点创建一个新应用程序,mysite1请进入testproject目录并运行:

python manage.py startapp mysite1

mysite1这会为应用程序生成一个新目录mysite1

即仅使用这两个命令,您将到达此层次结构:

testproject/
├── __init__.py
├── manage.py
├── mysite1
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── settings.py
└── urls.py

请参阅此处django-admin.py的和/或manage.py单个命令。

在 Django 中, a和 an之间存在一对多的关系。应用程序通常是一个单独的站点组件(例如,),而项目是多个应用程序的组织,可以为许多不同的站点提供支持。这就是您获得站点框架的原因。在实践中,一个项目通常服务于一个网站,但对于一个项目的 Django应用程序,您可以为尽可能多的网站服务,以实现可重用性。projectappcommentsratingssites

PS我认为创建一个简单称为项目的项目test并不是一个好习惯,因为在app级别单元测试中使用Django单元测试将进入一个名为的文件tests.py或一个名为tests.

更新 Django 1.4

正如@zeantsoi在下面评论的那样,我的回答是:

适用于 Django 1.3 及之前的版本。根据文档,从 1.4 开始,基本配置文件(包括 settings.py、urls.py 和 wsgi.py)被抽象到一个与项目同名的子目录中。

于 2012-04-09T21:16:49.137 回答
2

“测试”是您项目的顶层。我从未使用过交响乐 2,所以我无法对此发表评论,但看起来你已经掌握了它。那里的文件基本上都是全局配置文件。在您的“测试”文件夹中,您还应该有一个或多个应用程序文件夹。在这些应用程序文件夹中保存着应用程序特定的模型、视图、url 等。

看来您的foo应用程序应该存在于 root/test/foo 而不是 root/foo 中有些错误。

现在在我的项目中,我倾向于将 virtualenv 文件夹之类的东西放在根目录中,但是您绝对不应该在该级别拥有应用程序(它只是行不通)

于 2012-04-09T21:03:10.763 回答
1

manage.py 不提供 startproject 命令——通常是 django-admin 命令。我会检查您正在执行哪个 manage.py,理想情况下,使用您创建的项目目录中的 manage.py。

于 2012-04-09T21:01:09.893 回答