Django共享库/类
我刚开始学习Django,想请教一下该把我的共享库放在哪里比较好。我打算创建一些类,希望在项目中的所有应用里都能使用。请问把它们放在哪里最合适呢?
比如说抽象模型。
谢谢!
4 个回答
如果你打算在其他项目中也使用这个共享库,可以用 distutils 来制作一个安装程序。不过,如果这个库只是为了你当前项目里的应用,那你可以参考AntonioP的回答。
记住,当你运行你的django项目时,项目的根目录(也就是包含manage.py的文件夹)总是在你的PYTHON_PATH里。所以你可以创建一个叫 deps
、dependencies
、extra
或者你喜欢的任何名字的文件夹,把你的共享库放在里面。
我从《Two Scoops of Django》这本书中学到的一个重要点是,你可以把共享的代码放在自己创建的一个Django应用里,叫做core
。
使用core
这个应用的方法和你从其他应用中调用类的方式是差不多的。
想了解更多,可以去看看这本书的第28章,标题是:“那些随机工具呢?”
我们通常会这样设置我们的项目:
/site/
__init__.py
manage.py
settings.py
urls.py
/apps/
__init__.py
/appA/
__init__.py
/appB/
__init__.py
/lib/
__init__.py
/django-lib/
__init__.py
/shared-lib/
__init__.py
只要确保你的网站目录在你的 Python 路径上就可以了:
import sys
sys.path.append('/path/to/site/')
另外,要确保在 site、apps 和 lib 目录下都有一个名为 init.py 的文件,这样它们才能被当作模块来使用,像这样用点号导入(比如 import site.lib.shared-lib)。
补充:
关于你的 Python 路径的问题,其实和你的 'manage.py' 或类似文件的位置有关。如果这个文件在 /site/ 目录下(和 apps、lib 在一起),那么 PYTHONPATH 应该就没问题。
你需要确保每个目录里都有一个空文件,名字叫 __init__.py
。这个文件告诉 Python 把这个目录当作一个模块。看看上面的 ASCII 艺术,更新得更好了。