2012-08-25 14 views
5

Django प्रबंधन कमांड दस्तावेज सभी आदेशों को ऐप/प्रबंधन/कमांड फ़ोल्डर में बनाया जा रहा है। क्या आदेशों को उपफोल्डर्स में रखना संभव है, जैसे ऐप/प्रबंधन/कमांड/इंस्टॉल और ऐप/प्रबंधन/कमांड/रखरखाव? यह कैसे किया जाएगा?Django: स्प्लिट प्रबंधन कमांडर्स में विभाजित

+1

क्या आप अपनी समस्या पर अधिक जानकारी दे सकते हैं? क्या आप यही खोज रहे हैं? https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – Marat

+0

मैं आदेशों को ऐप/प्रबंधन/कमांड के सबफ़ोल्डर में रखना चाहता हूं। मैंने प्रश्न में और विस्तार जोड़ा है। –

उत्तर

5

दुर्भाग्य से, Django 1.4 के रूप में ऐसा करने का कोई तरीका नहीं लगता है।

def find_commands(management_dir): 
    """ 
    Given a path to a management directory, returns a list of all the command 
    names that are available. 

    Returns an empty list if no commands are defined. 
    """ 
    command_dir = os.path.join(management_dir, 'commands') 
    try: 
     return [f[:-3] for f in os.listdir(command_dir) 
       if not f.startswith('_') and f.endswith('.py')] 
    except OSError: 
     return [] 

आप देख सकते हैं, यह केवल फाइलों पर विचार करता है सीधे commands फ़ोल्डर के अंदर, उप-अनदेखी: django.core.management.__init__.py के लिए सूत्रों का कहना है इस विधि की है। हालांकि, अगर आप "बंदर पैच" इस समारोह किसी भी तरह, कोड के बाकी ठीक काम करना चाहिए, के बाद से कोड है कि वास्तव में Command उदाहरण बनाता है यह है:

def load_command_class(app_name, name): 
    """ 
    Given a command name and an application name, returns the Command 
    class instance. All errors raised by the import process 
    (ImportError, AttributeError) are allowed to propagate. 
    """ 
    module = import_module('%s.management.commands.%s' % (app_name, name)) 
    return module.Command() 

इसलिए, यदि आप था एक कमांड subfolder.command यह नामित सही स्क्रिप्ट लोड करेगा और सही वर्ग को तुरंत चालू करेगा।

एक व्यावहारिक दृष्टिकोण से, हालांकि, मुझे ऐसा करने का कोई उपयोग नहीं दिखता है। निश्चित रूप से, "नेमस्पेस" आदेश होने से अच्छा होगा, लेकिन यदि आप चाहते हैं, तो आप किसी भी नाम के साथ अपने सभी आदेशों को हमेशा उपसर्ग कर सकते हैं, जैसे किसी विभाजक के रूप में कुछ और (_)। आदेश नाम की लंबाई - और टर्मिनल में टाइप करने के लिए आवश्यक कीस्ट्रोक की संख्या - वही होगी ...

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