2014-05-10 15 views
5

Tôi có nhiều tệp CSS bên trong SITE_ROOT/sources/css và tôi muốn chỉ nén một tệp trong SITE_ROOT/static/css sử dụng django-pipeline.Làm thế nào để nén một tập tin cụ thể bằng cách sử dụng đường ống trong 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', 
    } 
} 

Sau khi chạy collectstatic Tôi nhìn thấy trong static/ thư mục tập tin được rút gọn (responsive.min.css) nhưng đó cũng là một bản sao của tất cả các file nằm trong thư mục sources/ và một bản sao của tập tin tĩnh django admin. Làm cách nào để chỉ nhận tệp được rút gọn trong thư mục STATIC_ROOT?

Trả lời

2

Bạn có thể tạo lớp STATICFILES_STORAGE của riêng mình, được kế thừa từ PipelineStorage, mở rộng behavior of PipelineMixin. Một cái gì đó như thế này (cần phải được kiểm tra):

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 

và sử dụng nó trong settings.py của bạn thay vì PipelineStorage.

Một cách khác có thể là chạy một tác vụ tự động để xóa thư mục này sau mỗi lần thu thập. Nó sẽ là ý tưởng tương tự nhưng trên chính lệnh manage.

Các vấn đề liên quan