2014-05-10 11 views
5

Ho molti file CSS all'interno di SITE_ROOT/sources/css e voglio comprimere solo un file in SITE_ROOT/static/css utilizzando django-pipeline.Come comprimere un file specifico usando la pipeline in Django?

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', 
    } 
} 

Dopo l'esecuzione collectstatic vedo nel static/ cartella il file minified (responsive.min.css), ma c'è anche una copia di tutti i file che si trovano nella cartella sources/ e una copia del file statici Django Admin. Come posso ottenere solo il file minificato nella cartella STATIC_ROOT?

risposta

2

È possibile creare la propria classe STATICFILES_STORAGE, ereditata da PipelineStorage, che espande lo behavior of PipelineMixin. Qualcosa di simile a questo (ha bisogno di essere testato):

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 

e utilizzarlo nella vostra settings.py invece di PipelineStorage.

Un altro modo potrebbe essere quello di eseguire un'attività automatizzata per pulire questa directory dopo ogni collecttatic. Sarebbe la stessa idea ma sul comando manage stesso.

Problemi correlati