5

我不确定我是否做对了,但问题是:

  • 我正在使用django-compressorlessc处理器
  • 一些 LESS 文件具有相对图像 URL。有些是我的,有些是第 3 方库(例如Bootstrap)
  • COMPRESS_ENABLED什么时候True,一切正常
  • COMPRESS_ENABLEDisFalse时,CssAbsoluteFilter不再运行,这意味着所有相对图像 URL 都保持相对,因此被破坏(因为它们与CACHE目录无关)

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

当涉及到 LESS + 时,您通常如何工作django-compressor

4

3 回答 3

7

您可以使用一个简单的解决方法:

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

预编译器.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

于 2013-02-12T21:36:01.803 回答
1

这已在 django-compressor 1.6 中修复。从变更日志

Apply CssAbsoluteFilter to precompiled css even when compression is disabled

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

于 2015-12-06T16:16:45.190 回答
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'),
)
于 2014-10-03T20:55:06.697 回答