2012-05-02 6 views
5

をlesscを使用して、私は正しいことをやっているかわからないが、ここで問題があります:ジャンゴ・コンプレッサー:デバッグモードで

  • 私はlesscプリプロセッサ
  • の一部でdjango-compressorを使用していますLESSファイルには相対イメージURLがあります。いくつかは、いくつかのサードパーティのライブラリ(例えばブートストラップ)COMPRESS_ENABLEDTrueある場合は、すべてがすべての相対イメージURLが保持されていることを意味する、
  • COMPRESS_ENABLEDFalseある
  • CssAbsoluteFilterはもう実行されていない正常に動作している
  • あり、私のもの相対と(彼らはCACHEディレクトリからの相対じゃないので)ので

壊れている私は、彼らがから発信するかどうかの相対パスが同じファイルに解決「賢い」のディレクトリ構造を思い付くことができ210ディレクトリまたは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 = TrueFalseの両方で動作しますのでご注意ください

+0

私にはdjango_compressorのバグのようです - プリコンパイラは常に呼び出されますが、フィルタは圧縮時にのみ発生します。 – Greg

+0

はい、それはまさに何が起こるかです。バグではなく、文書化されているように動作します。しかし、それは*何が欲しいのではないから、IMHO、私は何かを見逃しているのか、それとも間違っているのか不思議です。 – Ludovic

+0

これは、django_compressor devsによって考慮されていないケースのようです...バグではないにしても間違いなく問題です。あなたはあなたのURLを変換するためのプリコンパイラスクリプトを書こうとしましたか? – Greg

答えて

7

あなたが簡単な回避策を使用することができます。これは、ジャンゴ・コンプレッサー1.6で修正されてい

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', 'path.to.PatchedSCSSCompiler'), 
) 
0

は次のようになります。

Apply CssAbsoluteFilter to precompiled css even when compression is disabled 

すなわち絶対フィルタもDEBUGを使用して以下のファイル上で実行される=真:changelogから。

1

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) 

そして、あなたの設定ファイルで:あなたはジャンゴ・libsassフィルタのコードを使用している場合は