Tim*_*ony 6 python django django-models pythonpath
我正在尝试从一开始就为开发我的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
Run Code Online (Sandbox Code Playgroud)
这是基本布局; 我希望每个项目都有一个应用程序目录,并且在每个应用程序中都有一个单独的文件夹,用于模型,视图和URL.
我遇到的问题是python路径以及如何处理模块.
在一个应用程序中,我不想在导入模型时引用该项目,即我应该使用:
import appname.models.modelname
Run Code Online (Sandbox Code Playgroud)
不:
import projectname.models.modelname
Run Code Online (Sandbox Code Playgroud)
帮助reusablility
在models目录中,我有以下init .py
from model1 import ModelName1
from model2 import ModelName2
from model3 import ModelName3
__all__ = ['ModelName1', 'ModelName2', 'ModelName3']
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用单独的url文件(在/appname/urls/urlfile.py中)并导入模型时,如下所示:
from appname.models.somemodel import ModelName
Run Code Online (Sandbox Code Playgroud)
我收到"找不到模块"错误.
而:
from appsfolder.appname.models.somemodel import ModelName
Run Code Online (Sandbox Code Playgroud)
工作正常
我认为这是因为应用程序不是直接在python路径上,而是在一个名为appsfolder的子文件夹中,但我不知道如何修复它,同时保持一切可重用和相对.
我知道一个解决方案是将所有应用程序直接放在site-packages下的python路径上,但我真的不喜欢这个想法,因为我认为如果你使用virtualenv的应用程序应该在项目中
Ber*_*ant 15
您可以将以下内容settings.py添加appsfolder到您的PYTHONPATH:
import os
import sys
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0, os.path.join(PROJECT_ROOT, 'appsfolder'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9543 次 |
| 最近记录: |