python - 在项目文件夹之外安装 Django Apps?

标签 python django django-models filesystems

出于完全愚蠢的原因,我想彻底改变我的 Django 项目文件系统的布局方式。特别是,我想将构成网站的实际应用程序移动到与管理/设置文件不同的文件夹中。例如,而不是:

django/
    site/
        __init__.py
        manage.py
        settings.py
        urls.py
        home/
            __init__.py
            views.py
            models.py
            template.html
        page/
            __init__.py
            views.py
            models.py
            template.html
        media/
            __init__.py
            styles.css
            picture1.jpg
            picture2.jpg

我希望它是:

django/
    site/
        __init__.py
        manage.py
        settings.py
        urls.py
    home/
        __init__.py
        views.py
        models.py
        template.html
    page/
        __init__.py
        views.py
        models.py
        template.html
    media/
        __init__.py
        styles.css
        picture1.jpg
        picture2.jpg

因为我认为我的文件系统的 N 叉树尽可能地平衡,最小化它的高度以保证任何特定文件的 O(lgn) 搜索时间!!!

我已经成功地设置了我的 django.wsgi,这样当 python 运行时,我所有的“外部”文件夹都是系统路径的一部分,因此导入工作完美。同样,我做了一个 os.chdir() 来使从文件系统加载也能完美地工作。 URL 映射器也可以完美地工作,将传入的请求定向到这些“外部”模块进行处理。

但是,我没有设法让 manage.py 加载这些“外部”模块,大概是因为它不通过 django.wsgi 运行,因此 sys.path 修改不适用于它们。因此,当我将这些外部文件夹放入 INSTALLED_APPS(例如“home”而不是“site.home”)时,它找不到它们,给我:

Error: No module named home

每当我尝试 python manage.py syncdb 时。我曾尝试将 PYTHONPATH 环境变量设置为/home/django,希望这会导致运行的所有 python 脚本检查该文件夹并加载我的“外部”模块,但这也失败了。我还能做些什么来让 manage.py 在加载它的东西时检查这些外部文件夹吗?

最佳答案

使用这样的设置,您甚至可以将您的代码与 django 站点配置完全分开:

site/
    yoursitename/
        __init__.py
        manage.py
        settings.py
        urls.py
src/
    your/
        namespaced/
            apps/
                app1/
                    models.py...
                app2/...

在 settings.py 中,只需将“src”目录加载到 PYTHONPATH 中:

SITE_PATH = os.path.abspath(os.path.dirname(__file__))
PROJECT_PATH = os.path.normpath(os.path.join(SITE_PATH, '..', '..'))
SRC_PATH = os.path.join(PROJECT_PATH, 'src')
if SRC_PATH not in sys.path:
    sys.path.insert(0, SRC_PATH)

最后,您作为 egg 或 pips 安装的所有“可重用”应用程序都以相同的方式工作,它们只是存在于 pythonpath 中。

关于python - 在项目文件夹之外安装 Django Apps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6947471/

相关文章:

python - 使用具有相同 random_seed 的 CPU 和 GPU 的 CatBoost 回归时的指标分数不同

python - Django 删除和更新 View 仅适用于所有者

python - 如何使用特定格式在 Django 模板上获取本地化日期?

python - Django 表单未显示在管理页面上

python - 如何在可重用的 Django 应用程序中建模外键?

python - Python的应用

python - 属性错误: Generic detail view must be called with either an object pk or a slug

python - 理解和评估模板匹配方法

python - InvalidBasesError : Cannot resolve bases for [<ModelState: 'users.GroupProxy' >]

django - Django 测试用例中的 IntegrityError