2012-05-02 25 views
5

Tôi không chắc chắn tôi đang làm điều đúng, nhưng đây là vấn đề:django-nén: Sử dụng lessc trong chế độ DEBUG

  • Tôi đang sử dụng django-compressor với lessc Preprocessor
  • Một số Tệp LESS có URL hình ảnh tương đối. Một số là của tôi, một số là thư viện của bên thứ 3 (ví dụ Bootstrap)
  • Khi COMPRESS_ENABLEDTrue, tất cả đang làm việc tốt
  • Khi COMPRESS_ENABLEDFalse, các CssAbsoluteFilter không chạy nữa, có nghĩa là tất cả các URL hình ảnh tương đối được giữ tương đối và do đó bị hỏng (vì chúng tôi không thân từ thư mục CACHE)

tôi có thể đưa ra một cấu trúc thư mục "thông minh", nơi đường dẫn tương đối giải quyết đến cùng một tập tin cho dù họ có nguồn gốc từ CACHE thư mục hoặc từ thư mục tệp LESS, nhưng điều đó có vẻ như một cách giải quyết giòn.

Bạn thường làm việc như thế nào khi nói đến LESS + django-compressor?

+0

Có vẻ như một lỗi trong django_compressor với tôi - các trình biên dịch trước luôn được gọi, nhưng các bộ lọc chỉ xảy ra khi nén. – Greg

+0

Vâng, đó là chính xác những gì xảy ra - vì vậy không phải là một lỗi, vì nó hoạt động như tài liệu. Nhưng vì nó không phải là những gì * mong muốn *, IMHO, tôi tự hỏi nếu tôi đang thiếu một cái gì đó hoặc chỉ sử dụng nó sai. – Ludovic

+0

Có vẻ như đó là một trường hợp chưa được các nhà phát triển django_compressor xem xét ... đó chắc chắn là một vấn đề, nếu không phải là lỗi. Bạn đã thử viết một kịch bản trình biên dịch trước để chuyển đổi các url của mình chưa? – Greg

Trả lời

7

Bạn có thể sử dụng một cách giải quyết đơn giản:

COMPRESS_PRECOMPILERS = (
    ('text/less', 'path.to.precompilers.LessFilter'), 
) 

precompilers.py:

from compressor.filters.base import CompilerFilter 
from compressor.filters.css_default import CssAbsoluteFilter 

class LessFilter(CompilerFilter): 
    def __init__(self, content, attrs, **kwargs): 
     super(LessFilter, self).__init__(content, command='lessc {infile} {outfile}', **kwargs) 

    def input(self, **kwargs): 
     content = super(LessFilter, self).input(**kwargs) 
     return CssAbsoluteFilter(content).input(**kwargs) 

Xin lưu ý này làm việc với cả hai COMPRESS_ENABLED = TrueFalse.

0

Trong trường hợp bạn đang sử dụng django-libsass mã lọc trông như thế này:

from compressor.filters.css_default import CssAbsoluteFilter 
from django_libsass import SassCompiler 


class PatchedSCSSCompiler(SassCompiler): 
    def input(self, **kwargs): 
     content = super(PatchedSCSSCompiler, self).input(**kwargs) 
     return CssAbsoluteFilter(content).input(**kwargs) 

Và sau đó trong cài đặt tập tin của bạn:

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'path.to.PatchedSCSSCompiler'), 
) 
1

này đã được cố định trong django-máy nén 1.6 . Từ số changelog:

Apply CssAbsoluteFilter to precompiled css even when compression is disabled 

tức là bộ lọc tuyệt đối chạy trên ít tệp hơn ngay cả với DEBUG = True.

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