我不确定我做得对,但问题在于:
django-compressor
使用lessc
预处理器COMPRESS_ENABLED
为True
时,一切正常COMPRESS_ENABLED
为False
时,CssAbsoluteFilter
不再运行,这意味着所有相对图片网址都保持相对,因此会被破坏(因为它们与CACHE
不相关{1}}目录)我可以想出一个“聪明”的目录结构,其中相对路径解析为同一个文件,无论它们来自CACHE
目录还是来自LESS文件目录,但这似乎是一个脆弱的解决方法。
当谈到LESS + django-compressor
时,你通常如何工作?
答案 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 = True
和False
。
答案 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'),
)