django collectstatic 不排除外部文件夹

django collectstatic does not exclude external folder

我把我的客户端项目文件夹和django项目文件夹分别放在了根文件夹下。我将 django settings.py 配置为包含客户端的 app 文件夹以在开发中服务,dist 文件夹由 collectstatic

收集
STATICFILES_DIRS = [os.path.join(BASE_DIR, "..", "Client/app"), # in development
                    os.path.join(BASE_DIR, "..", "Client/dist"), # to be gathered by collectstatic 
                   ]

Client/app 包含原始 js/css/html 文件用于开发和 Client/dist 包含用于生产的串联和丑化文件。

因为Client/app文件夹只用于开发,所以我想在使用collectstaic命令时排除该文件夹。

但是,collectstatic -i app 不排除 Client/app 文件夹。我试过了

collectstatic -i Client/app
collectstatic -i ../Client/app
collectstatic -i app*

但是,没有任何效果。

如何排除 django 目录之外的文件夹?

你通常不会那样做。您可以根据 运行.

的环境定义不同的 STATICFILES_DIR

非常基本的想法:

if DEBUG:
    STATICFILES_DIRS = [os.path.join(BASE_DIR, "..", "Client/app")]
else:
    STATICFILES_DIRS = [os.path.join(BASE_DIR, "..", "Client/dist")]

虽然我不依赖 DEBUG 设置,但我建议您为每个设置使用一个单独的配置文件。然后,您可以在调用 Django 时选择 运行。

例如,假设这个文件树:

settings/
    ├ __init__.py     # empty
    ├ dev.py
    └ prod.py

…您将以这种方式启动 Django:

export DJANGO_SETTINGS_MODULE="settings.dev"
./manage.py runserver

为了避免重复共享配置,创建一个 common.py 并从 dev.pyprod.py 导入它,使用 from settings.common import *(可能是唯一允许的用例导入 *).

虽然它没有从技术上回答您的问题,但我认为这是解决处理特定于环境的配置的更广泛问题的更简洁的方法。