2012-05-02 24 views
5

我不知道我在做正確的事情,但這裏的問題:Django的壓縮機:在調試模式下使用lessc

  • 我使用django-compressorlessc預處理
  • 一些LESS文件具有相對圖片網址。有些是我的,有些是第三方庫(引導)
  • COMPRESS_ENABLEDTrue,一切工作正常
  • COMPRESS_ENABLEDFalse,則CssAbsoluteFilter不運行了,這意味着所有相對圖像URL保持相對的,因此被打破(因爲他們不是從CACHE目錄的相對)

我能想出一個「聰明」的目錄結構,其中相對路徑解析爲同一個文件是否從起源210目錄或來自LESS文件目錄,但這似乎是一個脆弱的解決方法。

對於LESS + django-compressor,您通常如何工作?

+0

似乎是django_compressor中的一個錯誤 - 預編譯器總是被調用,但過濾器只在壓縮時纔會發生。 – Greg

+0

是的,這正是發生了什麼 - 所以不是一個錯誤,因爲它按照記錄工作。但由於它不是* *所希望的*,恕我直言,我想知道我是否錯過了某些東西或者錯誤地使用了它。 – Ludovic

+0

似乎是django_compressor開發人員沒有考慮過的情況......這絕對是一個問題,如果不是bug的話。你有沒有嘗試編寫一個預編譯腳本來轉換你的網址? – Greg

回答

7

你可以使用一個簡單的解決方法:

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) 

請注意,這可工作在COMPRESS_ENABLED = TrueFalse

0

如果你使用Django的libsass過濾器的代碼如下所示:

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) 

,然後在設置文件:

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

這已被固定在Django的壓縮機1.6 。從changelog

Apply CssAbsoluteFilter to precompiled css even when compression is disabled 

即絕對過濾器上的文件少用甚至調試運行=真。