只是为了解决这个问题,如果可能的话,我想这样做而不是将它们全部嵌套在应用程序的静态文件夹中的应用程序名称的目录中,这感觉是多余的。如果这是唯一的方式,那么这就是生活。
我在用:
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
和:
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
它在运行 collectstatic 时编译 JS 和 SASS。它们都位于 APP_ROOT/static/ 目录中。
唯一的“问题”是它附带了所有源 sass 和 js 文件。在某个时候,我将把这一切都推到 S3 上,如果可能的话,我想避免这种情况。
我发现如果你运行:
python manage.py collectstatic -i sass -i js
它仍然编译我指定的 JS 和 CSS 文件,而将其余的“源”文件排除在外。不幸的是,它也会忽略 /admin/ 中的每个 js 文件,因为它匹配 /admin/js/ 等。我什至不知道这是否可能是这个特定项目的问题,但我可以预见未来其他应用程序在哪里我肯定会想要包含保存在应用程序中的静态 js/css。
我想做的是:
python manage.py collectstatic -i app_name/sass -i app_name/js
正如我在顶部提到的,简单的解决方案就是在文件夹中的静态文件前面加上 app_name/,就像 django.contrib.admin 的做法一样。但是,此时您最终会得到 PROJECT_ROOT/app_name/static/app_name/[js|sass|img|data]/ 的目录结构,我认为应该可以避免冗余。
话又说回来,也许这是最好的选择,以保证避免与其他应用程序冲突?
我已经研究过编写自定义存储和查找器,我认为可以自己动手。不过,我想先在这里检查一下,看看这是否是其他人已经解决的问题,或者,要实际检查一下压倒性的反应是否只是添加前缀目录。
如果我要自己动手,我认为我会走的路将是扩展django.contrib.staticfiles.finders.AppDirectoriesFinder
和压倒一切list()
。我还不确定这种方法会起作用,我需要更多地跟踪 collectstatic 管理命令的进展情况,所以如果有人以前做过这个或类似的事情,或者知道它为什么会/不会起作用,任何帮助都是赞赏。
谢谢!