Django 1.4新项目文件夹结构强制项目前缀?

时间:2012-02-09 14:01:51

标签: django

使用django 1.4并且看到当你使用startproject时,它现在在你的项目中创建一个具有相同名称的文件夹。

-myproject/
           manage.py
           myproject/
                    settings.py
                    urls.py

Documented change here

以前我的网址可以输入

ROOT_URLCONF = 'urls'

但那不再适用。我现在应该用项目名称作为前缀吗?即。

ROOT_URLCONF = 'myproject.urls'

- 在我的urls.py我导入设置中,但现在我必须在其前面添加from myproject import settings

我认为使用项目名称为变量加前缀是违反django标准的,因为它破坏了可重用性?

2 个答案:

答案 0 :(得分:54)

我只想补充一点,它会强制您在使用主myproject.urls时使用前缀,但它不会强迫您使用任何一种方式来处理您的应用。您可以选择将应用程序存储在顶级文件夹中:

myproject
|-- manage.py
|-- myproject
|   |-- __init__.py
|   |-- settings.py
|   |-- urls.py
|   `-- wsgi.py
`-- polls
    |-- __init__.py
    |-- models.py
    |-- tests.py
    `-- views.py

使用python manage.py startapp polls时,这是默认设置 在这种情况下,您可以使用from polls.models import Whatever

或者,您可以:

mkdir myproject/polls
python manage.py startapp polls myproject/polls

你会得到这个:

myproject
|-- manage.py
`-- myproject
    |-- __init__.py
    |-- polls
    |   |-- __init__.py
    |   |-- models.py
    |   |-- tests.py
    |   `-- views.py
    |-- settings.py
    |-- urls.py
    `-- wsgi.py

在这种情况下,您必须from myproject.polls.models import Whatever ...

因此,对于您认为可以在其他项目中重复使用的应用程序,前者更好,而后者对于与项目的其他部分紧密耦合的应用程序更好。

答案 1 :(得分:16)

是,使用您的项目名称加上ROOT_URLCONF前缀:

ROOT_URLCONF = 'myproject.urls'

您无论如何都不应直接导入设置(请参阅Using settings in Python code)。相反,请使用以下内容,它适用于旧项目布局和新项目布局。

from django.conf import settings