我正在开始我的第一个大型django项目,并意识到默认目录结构不能正常工作。
我看到了这个问题和答案,并决定实施类似的东西。 Large Django application layout
我需要做些什么来做这样的工作?如何更改django查找应用程序/模块的位置?
答案 0 :(得分:1)
我有两种方法来处理这个问题;一个用于生产,一个用于开发。
在发展中:
在settings.py
中添加应用的路径。就我而言,我的主项目位于~/hg/django/project/
,我的应用程序位于~/hg/django/apps/
。所以我用:
if DEVEL:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'apps'))
我也在我的开发盒上使用了制作方法。通过简单地在settings.py
中注释掉行路径插入,这种方法可以让我回滚到最新的生产版本。
在制作中:
我使用distutils
安装应用程序,以便我可以控制每台服务器的部署,并且每台服务器上运行的多个项目都可以访问它们。你可以在这里阅读the distutils
setup scripts。然后,要安装,您只需:
./setup.py install
答案 1 :(得分:1)
Python使用深层目录结构自动运行。你可能没有找到任何关于如何操作的说明。这里有关于如何使类和模型工作的一些说明。
如果您想在文件夹yourproject/apps/firstapp
中安装模块,可以通过添加行'apps.firstapp',
将其添加到INSTALLED_APPS。您必须在每个目录中添加__init__.py
文件,以便将它们识别为python包。
导入课程时,您只需使用from yourproject.apps.firstapp.filename import yourclass
。
您还应确保所有模板目录都列在TEMPLATE_DIRS
。
答案 2 :(得分:1)
如果你添加:
import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
将您的设置.py和以下内容发送到manage.py:
sys.path.insert(0, join(settings.PROJECT_ROOT, "apps"))
sys.path.insert(0, join(settings.PROJECT_ROOT, "lib"))
然后您可以将它们包含在已安装的应用中,就像它们位于项目根目录中一样:
INSTALLED_APPS = (
#local apps
'myapp',
#local libs
'piston_dev',
)
这使您可以更自由地移动应用程序而无需重新声明导入等。