我不知道为什么前面的答案得到 -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
),您可以将其用作导入路径的一部分。无论部署方法如何,这都应该有效,无需额外配置。