我开始在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
给了我相同的结果
答案 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中,project
和app
之间存在一对多关系。应用通常是一个单独的网站组件(例如comments
,ratings
),而项目是由多个应用组成的组织,可以为许多不同的网站提供支持。这就是你得到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.