Django共享库/类

14

我刚开始学习Django,并想请教一个问题:在哪里放置我的共享库?我计划创建一些类,以便在项目的所有应用程序中使用。最好的位置在哪里?例如抽象模型。

谢谢!


1
http://docs.python.org/tutorial/modules.html - Ignacio Vazquez-Abrams
相关的内容 http://timmyomahony.com/blog/updated-django-project-structure-or-folder-layout/ - zengr
4个回答

18

我们通常这样设置我们的项目:

/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艺术。

我按照你提到的步骤操作了,但是我无法从我的应用程序中导入一个类。我忽略了导入sys和添加路径的步骤,因为我正在Django内进行测试,这样做对吗? - Mo J. Mughrabi
@Mo请查看我编辑的更多信息。如果这还是不能帮助您,您能否编辑您的答案并附上错误消息? - Josh Smeaton
你会把什么放在 ./lib/django-lib/ 目录下? - Håken Lid
@HåkenLid 我甚至都不记得了,但我们不再使用供应商库了。只需使用virtualenv和pip :) - Josh Smeaton

14

我从 Two Scoops of Django 中学到的是,将共享代码放在自己创建的名为 core 的 Django 应用程序中。

然后使用 core 应用程序类似于如何跨应用程序使用类。

要了解更多,请查看书中第28章,标题为:“那些随机实用程序怎么样?”


1

如果共享库将在其他项目中使用,您可以使用distutils创建安装程序。 但是,如果仅用于项目中的应用程序,则可以采用AntonioP的答案。

请记住,在运行django项目时,您的项目根目录(包含manage.py的文件夹)始终在PYTHON_PATH中,因此您可以创建一个名为depsdependenciesextra或任何您喜欢的名称的文件夹,其中包含您的共享库。


0

无论你想要在哪里,只要它们在PYTHON_PATH中,你就可以导入它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接