5

正しいことをしているかどうかはわかりませんが、問題は次のとおりです。

  • 私はプリプロセッサで使用django-compressorしていますlessc
  • 一部の LESS ファイルには、相対イメージ URL があります。一部は私のもので、一部はサードパーティのライブラリです (例: Bootstrap)
  • COMPRESS_ENABLEDの場合True、すべて正常に動作しています
  • COMPRESS_ENABLEDisの場合False、はもう実行されていません。これは、すべての相対イメージ URL が相対のままであるため、壊れていることを意味します (ディレクトリCssAbsoluteFilterからの相対ではないため)。CACHE

CACHEディレクトリまたはLESSファイルディレクトリからの相対パスが同じファイルに解決される「賢い」ディレクトリ構造を思いつくことができましたが、それは脆弱な回避策のようです。

LESS + に関しては、通常どのように作業しますdjango-compressorか?

4

3 に答える 3

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

于 2013-02-12T21:36:01.803 に答える
1

これは django-compressor 1.6 で修正されました。変更ログから:

Apply CssAbsoluteFilter to precompiled css even when compression is disabled

つまり、絶対フィルタは、DEBUG = True の場合でも、より少ないファイルに対して実行されます。

于 2015-12-06T16:16:45.190 に答える
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'),
)
于 2014-10-03T20:55:06.697 に答える