我试图从一开始就为开发我的 django 项目进行最佳设置,但我无法让所有内容在目录结构中正常运行。我已经设置了 virtualenv(在这个例子中是 env),这样我就可以为每个 django 项目部署一个干净的空 python 环境。
基本结构如下:
/env/
/bin
/db <--- Django DB
/downloads
/lib
/static <--- Where css/imgs/js etc is served from
/project/ <--- Django root
/__init__.py
/settings.py
/manage.py
/appsfolder/
/appname/
/__init__.py
/models/
/__init__.py
/somemodel.py
/urls/
/__init__.py
/someurl.py
/views/
/__init__.py
/someview.py
这是基本布局;我希望每个项目都有一个应用程序目录,并且在每个应用程序中都有一个用于模型、视图和 url 的单独文件夹。
我遇到的问题是 python 路径以及模块的处理方式。
在应用程序中,我不想在导入模型时引用该项目,即我应该使用:
import appname.models.modelname
不是:
import projectname.models.modelname
帮助可重用性
在模型目录中,我有以下init .py
from model1 import ModelName1
from model2 import ModelName2
from model3 import ModelName3
__all__ = ['ModelName1', 'ModelName2', 'ModelName3']
但是当我尝试使用单独的 url 文件(在 /appname/urls/urlfile.py 中)并导入如下模型时:
from appname.models.somemodel import ModelName
我收到“未找到模块”错误。
尽管:
from appsfolder.appname.models.somemodel import ModelName
工作正常
我认为这是因为应用程序不是直接在 python 路径上,而是在一个名为 appsfolder 的子文件夹中,但我不确定如何解决这个问题,同时保持一切可重用和相对。
我知道一种解决方案是将所有应用程序直接放在站点包下的 python 路径上,但我不太喜欢这个想法,因为我认为如果您使用 virtualenv 的应用程序应该在项目中