2012-01-24 13 views
9

यहां परिदृश्य है:मेरा कम @ आयात पथ क्या होना चाहिए?

मैं Django 1.3.1 चला रहा हूं, staticfiles का उपयोग कर रहा हूं, और django-compressor (नवीनतम स्थिर), अन्य चीजों के साथ, कम फ़ाइलों को संकलित करता हूं।

मेरे पास एक "संपत्ति" निर्देशिका है जो STATICFILES_DIRS (परियोजना-व्यापी स्थिर संसाधनों के लिए) के साथ staticfiles में लगाई गई है। उस निर्देशिका में मेरे पास "सीएसएस" निर्देशिका है और उसमें "lib.less" फ़ाइल है जिसमें कम चर और मिश्रण शामिल हैं।

तो भौतिक पथ <project_root>/assets/css/lib.less है और यह /static/css/lib.less पर परोसा जाता है।

मेरे ऐप्स की स्थिर निर्देशिका में से एक में, मेरे पास एक और कम फ़ाइल है जिसे ऊपर दिए गए आयात को आयात करने की आवश्यकता है। इसके लिए भौतिक पथ <project_root>/myapp/static/myapp/css/file.less है और इसे /static/myapp/css/file.less पर परोसा जाएगा।

मेरी पहली सोचा था:

@import "../../css/lib.less" 

(यानी URL के आधार पर, /static/ को /static/myapp/css से स्तर तक जाना है, तो /static/css/lib.less में नीचे पार)।

हालांकि, यह काम नहीं करता है, और मैंने केवल यूआरएल और भौतिक पथों के हर संयोजन के बारे में सोचने की कोशिश की है और उनमें से सभी मुझे टेम्पलेट में FilterError एस दे सकते हैं, जिसके परिणामस्वरूप आयात करने के लिए फ़ाइल।

किसी के पास कोई भी विचार है कि वास्तविक आयात पथ क्या होना चाहिए?

उत्तर

11

डीजेंगो-कंप्रेसर स्रोत में त्रुटि कहां से आ रही थी, यह ट्रैक करने के बाद। यह सीधे खोल से पारित हो जाता है। जिसने मुझे सभी चरों को हटाने में और वास्तव में फ़ाइल को पार्स करने के लिए lessc कंपाइलर प्राप्त करने का प्रयास किया।

बाहर निकलता है यह स्रोत फ़ाइल फ़ाइल से संबंधित फाइल को भौतिक फाइल सिस्टम पथ के संदर्भ में आयात करने के लिए चाहता है। तो मुझे अपने <project_root> पर सभी तरह से वापस जाना पड़ा और फिर वहां से assets/css/lib.less संदर्भित किया गया। वास्तविक आयात कि अंत में काम किया था:

@import "../../../../assets/css/lib.less" 

क्या हालांकि बहुत अजीब है कि lessc नहीं एक पूर्ण फाइल सिस्टम पथ (अर्थात /path/to/project/assets/css/lib.less) को स्वीकार करेंगे है। मुझे यकीन नहीं है क्यों। जब मैं अंत में मेरी स्टेजिंग वातावरण के लिए अपने कोड को धक्का दिया और भाग गया collectstatic

अद्यतन (02/08/2012)

एक पूरा "ओह" पल था। @import पथ I का उपयोग विकास में ठीक काम करता था क्योंकि यह फ़ाइल के लिए भौतिक पथ था, लेकिन एक बार collectstatic ने यह काम किया है, सबकुछ चारों ओर स्थानांतरित हो गया है और <project_root>/static/ के सापेक्ष है।

मैंने पूर्व और पोस्ट [email protected] आयात पथ से मेल खाने के लिए प्रतीकात्मक लिंक का उपयोग करने के विचार से खिलवाड़ किया, लेकिन मैंने फैसला किया कि यह लंबे समय तक बहुत जटिल और नाजुक था।

SO ...मैंने तोड़ दिया और सभी कम फ़ाइलों को <project_root>/assets/css/ के तहत एक साथ स्थानांतरित कर दिया, और ऐप्स से कम फ़ाइलों को स्थानांतरित करने के तर्कसंगत बना दिया क्योंकि चूंकि वे कार्य करने के लिए प्रोजेक्ट-स्तरीय फ़ाइल से जुड़े हुए हैं, इसलिए वे स्वाभाविक रूप से प्रोजेक्ट-स्तर स्वयं हैं।

+0

ब्लाह! मुझे लगता है कि मुझे वही करना होगा ... मेरा स्थानीय देव कंपाइलर django की staticfiles से अवगत नहीं है .. इसलिए यदि मैंने अपने वर्कफ़्लो को स्थानीय रूप से एकत्रित करने के लिए संशोधित किया है, तो मेरा कंपाइलर/स्थिर/डीआईआर में फ़ाइलों को संशोधित करेगा। थोड़ा दुर्भाग्यपूर्ण। क्या आपने अभी भी सीएसएस के अलावा सबकुछ के लिए staticfiles का उपयोग कर समाप्त किया था? –

+0

मैंने अपनी कम फ़ाइलों को 'संपत्ति/कम/products.less' पर ले जाया और ऐप फ़ोल्डर संरचना को हटा दिया। अपनी सभी संपत्तियों वाला एक ऐप इतना साफ महसूस करता है, यह बहुत बुरा है यह चला गया है! –

+1

हो सकता है कि मुझे कुछ याद आ रहा है, लेकिन क्यों न केवल कुछ लोगों के साथ 'Lessc' को कॉन्फ़िगर करें जो इसे बनाता है ताकि आपको उन सापेक्ष पथों का उपयोग न करना पड़े? यह आदर्श या नेमस्पेस-वाई नहीं हो सकता है, लेकिन न ही आपका समाधान है। – tmandry

4

मैं एक ही बांध में हूं और यही वह है जो मैंने कंप्रेसर के नवीनतम संस्करणों और staticfiles के साथ एकीकृत करने के लिए किया है। उम्मीद है कि इससे कुछ अन्य लोगों को

जहां तक ​​मैं प्रयोग करने से कह सकता हूं, lessc में पूर्ण या सापेक्ष पथ की धारणा नहीं है। दरअसल, यह एक खोज पथ है, जो वर्तमान निर्देशिका, कम फ़ाइल की युक्त निर्देशिका में शामिल हैं बनाए रखने के लिए लगता है, और जो भी आप कंप्रेसर मैं

COMPRESS_PRECOMPILERS = (
    ('text/less', 'lessc --include-path=%s {infile} {outfile}' % STATIC_ROOT), 
) 
डाल के लिए अपने विन्यास में के माध्यम से --include-path

तो

इसे करने के लिए पारित

कहो, collectstatic चलाने के बाद मैं

STATIC_ROOT/bootstrap/3.2.0/bootstrap.css. 

पर बूटस्ट्रैप रहने वाले है तो फिर किसी भी कम फ़ाइल से, अब मैं लिख सकते हैं

@import (less, reference) "/bootstrap/3.2.0/bootstrap.css" 

जो मुझे बूटस्ट्रैप कक्षाओं को मेरी कम फ़ाइलों में कम मिश्रित के रूप में उपयोग करने की अनुमति देता है!

हर बार जब मैं एक कम फ़ाइल अद्यतन करता हूं, मुझे स्थानीय निर्देशिका में उन्हें एकत्रित करने के लिए संग्रहित करना होता है ताकि कंप्रेसर less सही स्रोत फ़ाइलों को काम करने के लिए दे सके। अन्यथा, कंप्रेसर आसानी से सबकुछ संभालता है। आप symlink के लिए collectstatic -l का भी उपयोग कर सकते हैं, जिसका अर्थ है कि जब आप एक नया जोड़ते हैं तो आपको केवल फाइलों को इकट्ठा करने की आवश्यकता होती है।

मैं एक प्रबंधन आदेश को लागू करने के विकास की प्रक्रिया है कि या तो उपवर्गों runservercollectstatic हर बार सर्वर पुनः लोड है कॉल करें, या collectstatic कॉल करने के लिए जब चीजें अपडेट किया जाता है सीधे django.utils.autoreload का उपयोग करता है के लिए बाहर चिकनी करने पर विचार कर रहा हूँ।

संपादित करें (2014/12/01): ऊपर उल्लिखित मेरा दृष्टिकोण स्थानीय स्थैतिक रूट की आवश्यकता है। मैं अपने उत्पादन वातावरण में ऑफलाइन संपीड़न के साथ रिमोट स्टोरेज का उपयोग कर रहा था, इसलिए तैनाती के लिए कुछ अतिरिक्त कदमों की आवश्यकता है। स्थिर फ़ाइलों को रिमोट स्टोरेज में सिंक करने के लिए collectstatic पर कॉल करने के अलावा, मैं collectstatic को विभिन्न django कॉन्फ़िगरेशन फ़ाइल के साथ कॉल करता हूं जो स्थानीय संग्रहण का उपयोग करता है। स्थानीय रूप से फ़ाइलों को एकत्र करने के बाद, मैं 'संपीड़ित' कह सकता हूं, इसे रिमोट स्टोरेज में परिणाम फ़ाइलों को अपलोड करने के लिए कॉन्फ़िगर किया गया है, लेकिन स्रोत फ़ाइलों के लिए स्थानीय संग्रहण में देखें।

संबंधित मुद्दे