2014-05-10 16 views
5

Mam wiele plików CSS wewnątrz SITE_ROOT/sources/css i chcę skompresować tylko jeden plik w SITE_ROOT/static/css przy użyciu django-pipeline.Jak skompresować określony plik za pomocą potoku w 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', 
    } 
} 

Po uruchomieniu collectstatic widzę w static/ folderze plik minified (responsive.min.css), ale istnieje również kopię wszystkich plików znajdujących się w folderze sources/ oraz kopię Django administratora plików statycznych. Jak mogę uzyskać tylko plik minified w folderze STATIC_ROOT?

Odpowiedz

2

Można utworzyć własną klasę STATICFILES_STORAGE, odziedziczoną po PipelineStorage, która zostanie rozszerzona o behavior of PipelineMixin. Coś jak to (muszą być testowane):

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 

i używać go w settings.py zamiast PipelineStorage.

Innym sposobem może być uruchomienie automatycznego zadania czyszczenia tego katalogu po każdym kolektorze. Byłby to ten sam pomysł, ale sama komenda manage.

Powiązane problemy