django压缩器:在调试模式下使用LESC

django压缩器:在调试模式下使用LESC,django,less,django-compressor,Django,Less,Django Compressor,我不确定我做的事情是否正确,但问题是: 我正在使用带有lessc预处理器的django压缩器 一些较少的文件具有相对的图像URL。有些是我的,有些是第三方库(例如Bootstrap) 当COMPRESS\u ENABLED为True时,一切正常 当启用的COMPRESS\u为False时,CssAbsoluteFilter不再运行,这意味着所有相对图像URL都保持相对状态,因此会断开(因为它们与缓存目录不相关) 我可以想出一个“聪明”的目录结构,其中相对路径解析为同一个文件,不管它们来自缓存

我不确定我做的事情是否正确,但问题是:

  • 我正在使用带有
    lessc
    预处理器的
    django压缩器
  • 一些较少的文件具有相对的图像URL。有些是我的,有些是第三方库(例如Bootstrap)
  • COMPRESS\u ENABLED
    True
    时,一切正常
  • 当启用的
    COMPRESS\u
    False
    时,
    CssAbsoluteFilter
    不再运行,这意味着所有相对图像URL都保持相对状态,因此会断开(因为它们与
    缓存
    目录不相关)
我可以想出一个“聪明”的目录结构,其中相对路径解析为同一个文件,不管它们来自
缓存
目录还是较少文件目录,但这似乎是一个脆弱的解决方法


当涉及较少+
django压缩机时,您通常如何工作?

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

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\u ENABLED=True
False

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

这已在django压缩机1.6中修复。从:


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

在我看来,django_compressor中似乎有一个bug-预编译器总是被调用,但过滤器只在压缩时发生。是的,这正是发生的情况——因此不是bug,因为它是根据文档记录工作的。但是因为这不是我想要的,我想知道我是否遗漏了什么或者只是用错了。看起来这是一个django_压缩机开发人员没有考虑过的案例。。。这肯定是一个问题,如果不是一个bug的话。您是否尝试过编写预编译脚本来转换URL?请参阅此处有关此问题的错误报告:
Apply CssAbsoluteFilter to precompiled css even when compression is disabled