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
不再运行,这意味着所有相对图像URL都保持相对状态,因此会断开(因为它们与CssAbsoluteFilter
目录不相关)缓存
缓存
目录还是较少文件目录,但这似乎是一个脆弱的解决方法
当涉及较少+
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