2014-05-10 3 views
5

Ich habe viele CSS-Dateien in SITE_ROOT/sources/css und ich möchte nur eine Datei in SITE_ROOT/static/css mit django-pipeline komprimieren.Wie komprimiere ich eine bestimmte Datei mit 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', 
    } 
} 

Nach collectstatic läuft ich im static/ Ordner die verkleinerte Datei (responsive.min.css) sehen, aber es gibt auch eine Kopie aller gefundenen Dateien im sources/ Ordner und eine Kopie der django Admin statischer Dateien. Wie kann ich nur die minimierte Datei im STATIC_ROOT-Ordner abrufen?

Antwort

2

Sie können Ihre eigene STATICFILES_STORAGE Klasse erstellen, geerbt von PipelineStorage, die die behavior of PipelineMixin erweitern. So etwas wie diese (müssen getestet werden):

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 

und verwenden Sie es in Ihrem settings.py statt PipelineStorage.

Eine andere Möglichkeit könnte darin bestehen, eine automatisierte Aufgabe auszuführen, um dieses Verzeichnis nach jedem Collectstatic zu bereinigen. Es wäre die gleiche Idee, aber auf dem manage Befehl selbst.

Verwandte Themen