2012-08-25 17 views
5

Django yönetim komutları belgeleri, uygulama/yönetim/komutlar klasöründe oluşturulmuş tüm komutları gösterir. Komutları uygulama/yönetim/komutlar/yükleme ve uygulama/yönetim/komutlar/bakım gibi alt klasörlere koymak mümkün mü? Bu nasıl halledilebilir?Django: alt klasörlere bölünmüş yönetim komutları

+1

Sorununuz hakkında daha fazla bilgi verebilir misiniz? aradığın şey bu mu? https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – Marat

+0

Uygulama/yönetim/komutların alt klasörlerine komutlar koymak istiyorum. Bu soruya daha fazla ayrıntı ekledim. –

cevap

5

Talihsizce, Django 1.4'den itibaren bunu yapmanın bir yolu yok gibi görünüyor. Gördüğünüz gibi

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 [] 

, sadece herhangi bir alt klasör yok sayarak doğrudan commands klasörün içindeki dosyaları dikkate alır: django.core.management.__init__.py için kaynaklar bu yöntemi var. aslında Command örneğini oluşturur kod olduğundan Ancak, "maymun yama" nasılsa bu fonksiyon, kodun kalan ince çalışması gerekir eğer: Yani

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() 

sen olsaydı, bir komut subfolder.command olarak adlandırdı Doğru komut dosyasını yükler ve doğru sınıfı başlatır. Bununla birlikte, pratik bir bakış açısıyla, bunu kullanmanın hiçbir faydasını görmüyorum. Tabii, "namespace'd" komutlarına sahip olmak güzel olurdu, ancak eğer isterseniz, bir komut ile başka bir şey kullanarak (_ gibi) tüm komutlarınızı istediğiniz zaman bir adla önleyebilirsiniz. Komut adı uzunluğu - ve terminalde onları yazmak için gereken tuş vuruşlarının sayısı aynı olacaktır ...