Django

2012-02-02 9 views
6

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

टेम्पलेट फ़ाइलों को प्रोजेक्ट रूट के तहत एक अलग निर्देशिका में डालने का अनुशंसित तरीका है जो ऐप्स द्वारा उप-निर्देशिकाओं में विभाजित है। तो, टेम्पलेट्स ऐप निर्देशिकाओं के भीतर स्थित नहीं हैं। यह मेरे लिए तार्किक लगता है क्योंकि हम प्रतिनिधित्व तर्क से आवेदन तर्क को अलग करना चाहते हैं। लेकिन स्थिर फाइलों के बारे में क्या? यहां, सामान्य अभ्यास ऐप डीआईआर के भीतर स्थैतिक फ़ाइलों का पता लगाने और उन्हें विकास के समय (संग्रहित) पर परियोजना रूट के तहत 'स्थिर' निर्देशिका में लोड करना प्रतीत होता है। और यह तर्क मुझे समझ में नहीं आता है। चूंकि स्थैतिक फाइलें (यानी जेएस, सीएसएस, इमेज) आमतौर पर टेम्पलेट्स के भीतर एक्सेस की जाती हैं, न कि एप्लिकेशन कोड के भीतर, मैं उन्हें प्रेजेंटेशन लॉजिक में गिना जाता हूं। तो वे टेम्पलेट्स की तरह क्यों संग्रहीत नहीं होते हैं - एकल ऐप्स के लिए उपनिर्देशिका के साथ, परियोजना रूट के तहत एक निर्देशिका?

मुझे पता है कि मैं जहां भी चाहूं इन फ़ाइलों को स्टोर कर सकता हूं लेकिन मुझे लगता है कि लोग इस तरह से ऐसा क्यों कर रहे हैं इसका एक अच्छा कारण हो सकता है। यह कारण क्या हो सकता है?

उत्तर

8

स्टेटिक फ़ाइलों को संबंधित ऐप में उसी तरह रखा जा सकता है जैसे किसी विशिष्ट ऐप से संबंधित टेम्पलेट अक्सर एप्लिकेशन निर्देशिका में डाल दिए जाते हैं।

कभी-कभी, यह समझ में आता है। कभी-कभी, ऐसा नहीं होता - यह आपका कॉल है।

उदाहरण के लिए, मैं एक site_media निर्देशिका (वैश्विक सीएसएस, वैश्विक छवि, आदि) में अपने स्थिर मीडिया डाल लेकिन app/static में एप्लिकेशन विशिष्ट मीडिया डाल दिया। उदाहरण के लिए, यदि मेरे पास Poll ऐप है, तो एक अच्छा मौका है कि मेरे मीडिया को केवल पोल ऐप टेम्पलेट्स के लिए जरूरी है, न कि मेरी साइट इंडेक्स।

एक ही टेम्पलेट के लिए चला जाता है: मैं एक वैश्विक टेम्पलेट निर्देशिका में मेरी वैश्विक टेम्पलेट्स (base.html) डाल दिया, लेकिन एप्लिकेशन विशिष्ट टेम्पलेट्स myapp/templates/myapp/foo.html में जाना।

अंततः, यह विशेष रूप से प्लग करने योग्य ऐप्स के लिए समझ में आता है। उदाहरण के लिए, डीजेंगो की स्थैतिक फाइलें ऐप में संग्रहीत होती हैं लेकिन आपकी स्थैतिक फाइल निर्देशिका में पहुंच योग्य हो जाती हैं भले ही ऐप आपके पायथन पथ पर कहीं भी रहता है। पहले, आपको मीडिया निर्देशिका या सिमलिंक की प्रतिलिपि बनाना पड़ता था।

staticfiles ऐप वास्तव में चमकता है क्योंकि यह आपको एक स्थान से सभी फ़ाइलों को व्यवस्थित करने देता है: एप्लिकेशन फ़ोल्डर। collectstatic बाकी का ख्याल रखता है, और यह वेब सर्वर के लिए एक ही स्थान पर उपलब्ध कराता है।

+0

मुझे लगता है कि ऐप निर्देशिकाओं के भीतर संगठित टेम्पलेट्स और स्थिर फाइलें प्लग करने योग्य ऐप्स के लिए समझ में आता है। लेकिन अगर मैं प्लग करने योग्य ऐप्स बनाने की योजना नहीं बना रहा तो कोई फायदा नहीं है, है ना? हर बार जब मैं अपने प्रोजेक्ट का एक नया संस्करण तैनात करता हूं तो मुझे केवल 'संग्रहित' कॉल करने का ओवरहेड होगा। – j0ker

+0

@ जे 0ker, जो बहस योग्य है और पूरी तरह से आपकी कॉल है। कभी-कभी, यदि यह एक विघटित रूप से पैक किया गया ऐप है तो मैं खुद को 'ऐप/स्थिर' का उपयोग कर पाता हूं। अन्य बार, कोर वेबसाइट से संबंधित सभी ऐप्स के समूह के लिए, मैं बस अपने 'site_media' फ़ोल्डर का उपयोग करता हूं। "Collectstatic" को कॉल करने का ओवरहेड मेरे लिए हटा दिया गया है क्योंकि मैं एक कपड़े स्क्रिप्ट का उपयोग करता हूं जो इसे किसी भी तरह से उपयोग करता है। प्लस <यह बेहद उपयोगी है कि यदि आप एक स्टेटिकफाइल स्टोरेज बैकएंड कॉन्फ़िगर करते हैं, तो आप अमेज़ॅन एस 3 पर संग्रहित अपलोड कर सकते हैं। –

5

मैं वास्तव में प्रत्येक ऐप के लिए निर्देशिका में टेम्पलेट डालता हूं और मुझे लगता है कि यह समझ में आता है। आपके पास अभी भी तर्क अलग होने का अलगाव है क्योंकि पाइथन फ़ाइलों में सबकुछ हो रहा है।

हालांकि, ऐप में टेम्पलेट निर्देशिका डालने का अर्थ है कि अगर यह पता चला कि ऐप अन्य परियोजनाओं के लिए उपयोगी है, तो आप ऐप को सीधे नई परियोजना पर कॉपी कर सकते हैं। और आप अपने रूट टेम्पलेट फ़ोल्डर में वैकल्पिक बनाकर उन टेम्पलेट्स को हमेशा ओवरराइड कर सकते हैं।

इस कारण से स्थिर निर्देशिका भी ऐप निर्देशिका में संग्रहीत की जानी चाहिए; यह आपको विशिष्ट ऐप के लिए आवश्यक चीज़ों के आधार पर संसाधनों को स्पष्ट रूप से व्यवस्थित करने की अनुमति देता है और यही कारण है कि staticfiles ऐप पहली जगह में बनाया गया था।