除了一些可以纠正的冗余行之外,我不知道为什么前面的答案是 -1。无论如何,我发现了一种稍微不同的方法,它不涉及向 python 路径添加任何内容。
这是我最终的目录结构,我稍后会解释:
mysite
├── mysite
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── apps
│ ├── __init__.py
│ └── myfirstapp
│ ├── __init__.py
│ ├── admin.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
└── manage.py
无论您是刚刚创建项目还是要移动应用程序,都应创建apps
应包含您的应用程序的子目录。诀窍是__init__.py
向该目录添加一个。
mkdir apps
touch apps/__init__.py
现在您可以将现有的应用程序移动到apps
子目录中。如果您想创建一个新的,请使用以下命令:
python manage.py mysecondapp
mv mysecondapp apps/
警告:不要试图打电话给python manage.py ./apps/mysecondapp
. 出于某种原因,这会删除该目录中的所有其他应用程序。我就这样失去了一天的工作。
接下来,您将需要修复一些导入。您的settings.py
前缀应为apps
:
INSTALLED_APPS = (
...
'apps.myfirstapp',
'apps.mysecondapp'
)
最后,修复您的项目的urls.py
前缀apps
:
urlpatterns = patterns('',
url(r'^myfirstapp', include('apps.myfirstapp.urls')),
...
)
根据您编写它们的方式,您可能还必须在应用程序中修复一些导入。要么只使用from models import MyFirstModel
,要么也使用前缀from apps.myfirstapp.models import MyFirstModel
。
简而言之,如果您将apps
目录设为 python 包(通过添加__init__.py
),则可以将其用作导入路径的一部分。无论部署方法如何,这都应该有效,无需额外配置。