>我不确定我做对了,但问题是:
- 我正在使用带有
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 = True
和False
。
这已经在 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'),
)