2012-05-02 38 views
5

मुझे यकीन है कि मैं चीजों को सही कर रहा हूँ नहीं कर रहा हूँ, लेकिन यहाँ मुद्दा है:Django-कंप्रेसर: डिबग मोड में lessc का उपयोग

  • मैं lessc पूर्वप्रक्रमक
  • में से कुछ के साथ django-compressor उपयोग कर रहा हूँ कम फ़ाइलों में सापेक्ष छवि यूआरएल हैं। कुछ मेरे हैं, कुछ 3 पार्टी पुस्तकालयों (जैसे बूटस्ट्रैप)
  • जब COMPRESS_ENABLEDTrue है, सब ठीक काम कर रहा है
  • जब COMPRESS_ENABLEDFalse है, CssAbsoluteFilter अब और नहीं चल रहा है, जो सभी रिश्तेदार चित्र URL रखा जाता है इसका मतलब हैं रिश्तेदार और इसलिए टूट रहे हैं

मैं एक "चालाक" निर्देशिका संरचना के साथ आ सकता है जहां संबंधित पथ एक ही फाइल है कि क्या वेसे ही शुरू करने के लिए हल (क्योंकि वे CACHE निर्देशिका से रिश्तेदार नहीं कर रहे हैं) 210 निर्देशिका या कम फ़ाइलों निर्देशिका से, लेकिन यह एक भंगुर कामकाज की तरह लगता है।

कम + 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 दोनों के साथ काम करता

+0

मुझे django_compressor में एक बग की तरह लगता है - प्रीकंपलर हमेशा कॉल करते हैं, लेकिन फ़िल्टर केवल तभी होता है जब कंप्रेसर होता है। – Greg

+0

हां, यह वही होता है - इसलिए एक बग नहीं, क्योंकि यह दस्तावेज के रूप में काम करता है। लेकिन चूंकि यह * वांछित * नहीं है, आईएमएचओ, मुझे आश्चर्य है कि क्या मुझे कुछ याद आ रहा है या सिर्फ गलत इस्तेमाल कर रहा है। – Ludovic

+0

ऐसा लगता है कि यह एक ऐसा मामला है जिसे django_compressor devs द्वारा नहीं माना गया है ... अगर यह बग नहीं है तो यह निश्चित रूप से एक मुद्दा है। क्या आपने अपने यूआरएल को कन्वर्ट करने के लिए प्रीकंपेलर स्क्रिप्ट लिखने की कोशिश की है? – Greg

उत्तर

7

आप एक सरल तरीके का उपयोग कर सकते हैं।

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'), 
) 
1

यह Django-कंप्रेसर 1.6 में तय किया गया है ।

Apply CssAbsoluteFilter to precompiled css even when compression is disabled 

अर्थात पूर्ण फिल्टर भी डीबग के साथ अपने कम फाइलों पर चलाया जाता है = सच: changelog से।