django-compressor:在DEBUG模式下使用lessc

时间:2012-05-02 23:33:19

标签: django less django-compressor

我不确定我做得对,但问题在于:

  • 我正在django-compressor使用lessc预处理器
  • 某些LESS文件具有相对图像网址。有些是我的,有些是第三方库(例如 Bootstrap)
  • COMPRESS_ENABLEDTrue时,一切正常
  • COMPRESS_ENABLEDFalse时,CssAbsoluteFilter不再运行,这意味着所有相对图片网址都保持相对,因此会被破坏(因为它们与CACHE不相关{1}}目录)

我可以想出一个“聪明”的目录结构,其中相对路径解析为同一个文件,无论它们来自CACHE目录还是来自LESS文件目录,但这似乎是一个脆弱的解决方法。

当谈到LESS + django-compressor时,你通常如何工作?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这已在django-compressor 1.6中修复。来自changelog

Apply CssAbsoluteFilter to precompiled css even when compression is disabled

即。即使使用DEBUG = True,绝对过滤器也会在较少的文件上运行。

答案 2 :(得分: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'),
)