了解目录结构建议

时间:2012-04-09 20:55:58

标签: django configuration structure directory-structure

我开始在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 app文件夹)

我很困惑,因为Django docs告诉:

  

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

manage.py startapp foo在root下创建应用,而不是root/test(等同于mysite)

[编辑]

两个命令:

python manage.py startapp app

django-admin.py startapp app

在项目根目录中提供app,而不是root/name_of_generated_project

Django 1.4

[编辑] 2

对不起,伙计们,我的错,现在一切都好。

[编辑] 3

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

django-admin.py startproject jobeet

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

现在我想尝试创建app(在jobeet文件夹中):

django-admin.py startapp jobs

我最终得到jobeet/jobs而不是jobeet/jobeet/jobs

再次:/

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

- jobeet
- jobs
- manage.py

另一个命令:

python manage.py startapp app

给了我相同的结果

3 个答案:

答案 0 :(得分:6)

因此,假设您创建了一个新的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个别命令here

在Django中,projectapp之间存在一对多关系。应用通常是一个单独的网站组件(例如commentsratings),而项目是由多个应用组成的组织,可以为许多不同的网站提供支持。这就是你得到sites framework的原因。在实践中,一个项目通常服务于一个网站,但是使用Django sites应用程序和一个项目,您可以根据需要提供多个网站,以获得可重用性。

P.S。我认为创建一个简称为test的项目并不是一个好习惯,因为在app级别的单元测试中的Django单元测试会进入名为tests.py的文件或名为{{1的文件夹中}}

Django 1.4的更新

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

  

适用于Django 1.3及之前版本。 Per the docs,从1.4开始,基数   配置文件(包括settings.py,urls.py和wsgi.py)是   抽象到一个名为与项目同名的子目录。

答案 1 :(得分:2)

“test”是您项目的最高级别。我从来没有使用过交响乐2所以我不能对此发表评论,但似乎你已经掌握了它。生活在那里的文件基本上都是全局配置文件。在“test”文件夹中,您还应该有一个或多个应用程序文件夹。在这些应用程序文件夹中,可以使用特定于应用程序的模型,视图,网址等。

你的foo应用程序应该存在于root / test / foo而不是root / foo中,这似乎有点不对。

现在在我的项目中,我倾向于在根目录中存在类似virtualenv文件夹的内容,但是你肯定不应该在该级别拥有应用程序(它只是不起作用)

答案 2 :(得分:1)

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

相关问题