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



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

  • 我正在使用带有lessc预处理器的django-compressor
  • 一些 LESS 文件具有相对的图像 URL。有些是我的,有些是第三方库(例如引导程序)
  • COMPRESS_ENABLED True时,一切正常
  • COMPRESS_ENABLED False时,CssAbsoluteFilter不再运行,这意味着所有相对的图像URL都是相对的,因此被破坏(因为它们不是相对于CACHE目录的)

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

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

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

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

这已经在 django-compressor 1.6 中修复了。从更新日志:

Apply CssAbsoluteFilter to precompiled css even when compression is disabled

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

如果你使用的是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'),
)

最新更新