2014-11-06 8 views
5

के बजाय STATIC_ROOT/ऐप में SCSS फ़ाइलों को संकलित करता है हम django-compressor और django.contrib.staticfiles ऐप का उपयोग कर रहे हैं और हमें django विकास सर्वर चलाने और हमारे SCSS पर काम करते समय समस्याएं आ रही हैं: गलत SCSS फ़ाइलों को प्राप्त होता है संकलित। STATIC_ROOT/app में मौजूद संस्करण ऐप/स्थैतिक संस्करणों के बजाय मिल रहे हैं। इससे ऐसा होता है कि app/static में एससीएसएस में संपादन संकलित सीएसएस में दिखाई नहीं देता है।django-compressor ऐप/स्थिर

STATIC_ROOT/app में सब कुछ हटाकर समस्या को हल करता है, लेकिन अगर collectstatic किसी कारण से निष्पादित किया जाता है तो यह बहुत भ्रम पैदा करता है।

क्या यह सुनिश्चित करने का कोई तरीका है कि किसी भी मौजूदा STATIC_ROOT/ऐप फ़ाइलों के बजाय ऐप/स्थैतिक फ़ाइलों को संकलित किया गया है?

हम Django 1.6 के साथ Django-कंप्रेसर 1.4 का उपयोग कर रहे हैं और निम्नलिखित सेटिंग्स Django सेटिंग्स फ़ाइल में उपयोग किया जाता है:

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder", 
    "django.contrib.staticfiles.finders.AppDirectoriesFinder", 
    'compressor.finders.CompressorFinder', 
) 
COMPRESS_PRECOMPILERS = (
    ("text/x-scss", 'sass --scss'), 
) 
STATICFILES_DIRS = [] #default 
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 
+0

क्या आप अपनी 'STATICFILES_DIRS' और 'STATIC_ROOT' सेटिंग साझा कर सकते हैं? – richardcornish

+0

बस 'STATICFILES_DIRS' (जो कि केवल डिफ़ॉल्ट है) और 'STATIC_ROOT' के साथ संपादित किया गया है। – mstringer

+0

वास्तव में 'ऐप' क्या है? क्या यह एक Django ऐप है, एक Django परियोजना, या कुछ और? 'ऐप/स्थिर 'कहां रहता है? और क्या इसे 'INSTALLED_APPS' में जोड़ा गया था? – richardcornish

उत्तर

1

COMPRESS_PRECOMPILERS में आपका sass --scss comand स्पष्ट रूप से एक लक्ष्य निर्देशिका नहीं बताता है। इसलिए डिफ़ॉल्ट का उपयोग किया जाता है, जो seems to be stdin and stdout है।

अब, कंप्रेसर दस्तावेज इतना स्पष्ट नहीं है कि stdout का उपयोग करने का क्या अर्थ है; लेकिन, उदाहरण से ऐसा लगता है फ़ाइलों

मैं व्यक्तिगत रूप से क्या पसंद स्पष्ट रूप से इन/आउट निर्देशिका राज्य के लिए है (STATIC_ROOT/CACHE जो आपके मामले में root/base/static/CACHE/ है करने के लिए डिफ़ॉल्ट) COMPRESS_ROOT में खत्म हो जाएगा (विभिन्न वातावरण में लगातार रहने के लिए) । यहाँ एक उदाहरण है (एक pyScss संकलक का उपयोग कर, लेकिन यह विचार एक ही है):

scss_cmd = '{python} -mscss -A "{image_output_path}" -a "{static_url}" ' \ 
    '-S "{static_root}" -o "{{outfile}}" "{{infile}}"'.format(
     python=sys.executable, 
     image_output_path=COMPRESS_ROOT, 
     static_url=STATIC_URL, 
     static_root=os.path.join(PROJECT_ROOT), 
    ) 

COMPRESS_PRECOMPILERS = (
    ('text/x-scss', scss_cmd), 
) 

(खेद को खोदकर निकाल लेते है, तो लंबे समय तक भूल मुद्दों)

0

उपयोग django-libsass:

COMPRESS_PRECOMPILERS = (
    ('text/x-sass', 'django_libsass.SassCompiler'), 
    ('text/x-scss', 'django_libsass.SassCompiler'), 
) 

https://github.com/torchbox/django-libsass

में वर्णित STATIC_URL और STATIC_ROOT को सही तरीके से कॉन्फ़िगर करना सुनिश्चित करें।

उदाहरण के लिए:

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"), 
) 
STATIC_ROOT = os.path.join(BASE_DIR, 'static_collected') 

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'compressor.finders.CompressorFinder', 
) 

कंप्रेसर उचित रूप से DEBUG चर पर निर्भर करता है, बाकी की देखभाल करेंगे।