如何在Django中使用管道压缩特定文件?

时间:2014-05-10 22:30:18

标签: python django

我在SITE_ROOT/sources/css中有很多CSS文件,我想使用django-pipeline仅压缩SITE_ROOT/static/css中的一个文件。

STATIC_ROOT = os.path.join(SITE_ROOT, 'static')

STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'sources'),
)

PIPELINE_CSS = {
    'responsive': {
        'source_filenames': (
          'css/smartphones.css',
          'css/tablets.css',
        ),
        'output_filename': 'css/responsive.min.css',
    }
}

运行collectstatic后,我在static/文件夹中看到了缩小文件(responsive.min.css),但是还有sources/文件夹中所有文件的副本和django管理员静态文件的副本。 如何只获取STATIC_ROOT文件夹中的缩小文件?

1 个答案:

答案 0 :(得分:2)

您可以创建自己的STATICFILES_STORAGE类,继承自PipelineStorage,扩展behavior of PipelineMixin。像这样的东西(需要测试):

import shutil
import os.path

from django.conf import settings
from pipeline.storage import PipelineStorage

class PipelineCleanerStorage(PipelineStorage):
    def post_process(self, paths, dry_run=False, **options):
        # Do the usual stuff (compress and deliver)
        res = PipelineStorage.post_process(self, paths, dry_run=False, **options)

        # Clean sources files there
        shutil.rmtree(os.path.join(settings.BASE_DIR, "static/sources"))

        yield res

并在settings.py而不是PipelineStorage中使用它。

另一种方法是在每个collectstatic之后运行自动化任务来清理此目录。这是相同的想法,但在manage命令本身。