2010-04-11 19 views
18

मैं एक Django अनुप्रयोग विकसित कर रहा हूं, जो एक बड़ी प्रणाली है जिसके लिए चीजों को साफ रखने के लिए कई उप-अनुप्रयोगों की आवश्यकता होती है। इसलिए, मेरे पास एक शीर्ष स्तरीय निर्देशिका है जो एक Django ऐप है (क्योंकि इसमें खाली models.py फ़ाइल है), और कई उपनिर्देशिकाएं, जो स्वयं भी अनुप्रयोग हैं।Django उप-अनुप्रयोग और मॉड्यूल संरचना

कारण मैंने अपना आवेदन इस तरह से बाहर रखा है क्योंकि उप-अनुप्रयोग अलग हो गए हैं, लेकिन माता-पिता के आवेदन के बाहर उनका उपयोग कभी भी नहीं किया जाएगा। इसलिए उन्हें अलग से वितरित करने का कोई मतलब नहीं है।

INSTALLED_APPS = (
    ... 
    'myapp', 
    'myapp.subapp1', 
    'myapp.subapp2', 
    ... 
) 

... जो स्पष्ट रूप से करने से इनकी है:

जब मेरे आवेदन को स्थापित करने से, सेटिंग्स फ़ाइल कुछ इस तरह शामिल करने के लिए है। इसमें यह भी आवश्यक है कि सभी उप-अनुप्रयोगों को उनके "आंतरिक" नाम (यानी subapp1, subapp2 इत्यादि) द्वारा संदर्भित किया जाए। - जो किसी अन्य अनुप्रयोग के नाम के साथ संघर्ष होने की संभावना है

python manage.py reset subapp1 

यह कष्टप्रद है, विशेष रूप से, क्योंकि मैं एक उप एप्लिकेशन core कहा जाता है: उदाहरण के लिए, अगर मैं subapp1 के लिए डेटाबेस तालिकाओं रीसेट करना चाहते हैं, मैं लिखने की आवश्यकता जब मेरा एप्लिकेशन किसी उपयोगकर्ता की प्रोजेक्ट में स्थापित होता है।

क्या मैं इसे पूरी तरह से गलत तरीके से कर रहा हूं, या क्या इन "आंतरिक" ऐप्स को उनके पूर्ण नाम से संदर्भित करने के लिए मजबूर किया गया है?

+0

यह उप-इष्टतम क्यों है? क्या आप यह स्पष्ट कर सकते हैं कि आप क्या हासिल करना चाहते हैं? –

+0

बस इसलिए, मेरे "एप्लिकेशन" को स्थापित करने के लिए, पैरेंट मॉड्यूल के भीतर प्रत्येक ऐप आवश्यक है, इसलिए यह वास्तव में डेटा का डुप्लिकेशंस है। साथ ही, अगर हम कभी भी उप-अनुप्रयोग जोड़ते हैं, तो उन्हें प्रत्येक इंस्टॉलेशन पर इंस्टॉल किए गए ऐप्स की सूची में जोड़ा जाना होगा। –

उत्तर

12

आप इसे सही तरीके से कर रहे हैं, क्योंकि django खुद ही ऐसा करता है। उदाहरण के लिए व्यवस्थापक ऐप INSTALLED_APPS में django.contrib.admin के रूप में पंजीकृत है, लेकिन इसे रीसेट करने के लिए आपको manage.py reset admin का उपयोग करना होगा, और वास्तव में, manage.py reset django.contrib.admin काम नहीं करता है।

यह Django में एक बग के रूप में माना जा सकता है ...

हालांकि, आप, नाम संघर्षों से चिंतित नहीं होना चाहिए क्योंकि आप हमेशा के बाकी हिस्सों से एक virtualenv पर्यावरण अंदर Django, पृथक चलाना चाहिए पायथन स्थापना। यह एक साधारण पायथन स्थापना पर django चलाने से एक बेहद शक्तिशाली और लचीला समाधान है। उदाहरण के लिए, अधिक जानकारी, यहां: http://mathematism.com/2009/jul/30/presentation-pip-and-virtualenv/

+1

मैं पहले से ही वर्चुअलएन्व का उपयोग कर रहा हूं, लेकिन इससे समस्या हल नहीं होती है - क्योंकि उपयोगकर्ता वास्तव में अपने प्रोजेक्ट के भीतर 'कोर' नामक ऐप बनाने की संभावना है, जो तब मेरे 'कोर' एप के साथ संघर्ष करेगा। –

+0

निश्चित रूप से, यह एक सीमा है। मैंने एक पैच सबमिट किया: http://code.djangoproject.com/attachment/ticket/13323/applabel.diff इसी टिकट को भी देखें। मुझे यकीन नहीं है कि समस्या पूरी तरह हल हो गई है, हालांकि। –

+0

मुझे नहीं पता था कि इस पर चर्चा की जा रही थी, धन्यवाद। टिकट # 35 9 1 सबसे अधिक आशाजनक दिखता है, लेकिन यह 1.2 के लिए सूची में नहीं है, इसलिए मुझे लगता है कि कुछ ऐसा होने तक मुझे इस मुद्दे को हल करना होगा। मैं इस परियोजना के लिए Django की एक कस्टम स्थापना चलाने की कल्पना नहीं करता :)। –

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