让django-pipeline和bower一起玩得很好

时间:2015-02-28 01:45:09

标签: django bower django-pipeline collectstatic

我正在我的项目根目录下将bower组件安装到external/bower_components/。我在static下有其他静态文件,还有一些是已安装应用程序的一部分。我试图使用django-pipeline缩小所有生成bower_components的静态文件,而我只留下其他静态文件。

我的问题是,我无法弄清楚如何使用django-pipeline缩小我的bower组件,同时不会将所有bower包复制到目标目录。

settings.py中的

STATIC_ROOT = 'staticfiles'
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
    os.path.join(os.path.dirname(__file__), '..', 'external'),
)

STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage'

PIPELINE = True

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)

当我运行python manage.py collectstatic时,我最终会在staticfiles中找到我想要的东西(静态基础中的东西以及从凉亭中拉出的物品的缩小版本),加上凉亭中每一个包装的完整来源。这是从最终用户的角度来看的,但是那里有很多我实际上并不想要的垃圾。

要解决此问题,我尝试了python manage.py collectstatic -i bower_components。但在这种情况下,忽略不仅会导致collectstatic不复制文件,而且还会导致django-pipeline无法看到文件,并且最终

如果我尝试使用某些自定义管道查找程序,例如pipeline.finders.FileSystemFinder,则collectstatic会导致django.contrib.admin和我的static/文件夹中出现我想要的所有静态脚本和CSS。

有没有办法让我的蛋糕也可以吃掉它,以便我可以获得collectstatic的复制功能来关注一组django-pipeline的组合/缩小注意一个不同的群体?

写完这篇文章后,我意识到答案可能是使用PIPELINE_CSSPIPELINE_JS明确收集和缩小我已安装的应用中的所有脚本和css,但这似乎并不理想,因为它不常见每次集成新应用程序时都会产生开销。

1 个答案:

答案 0 :(得分:2)

是的,但是您需要修改静态查找器以更改静态查找器以使用django-pipeline finders:

STATICFILES_FINDERS = (
    'pipeline.finders.FileSystemFinder',
    'pipeline.finders.AppDirectoriesFinder',
    'pipeline.finders.CachedFileFinder',
    'pipeline.finders.PipelineFinder'
)

这应该只复制那里的相关文件。