2012-08-25 9 views
5

Die Dokumentation der Django-Verwaltungsbefehle zeigt alle Befehle an, die in einem app/management/commands-Ordner erstellt werden. Ist es möglich, Befehle in Unterordner wie app/management/commands/install und app/management/commands/maintenance zu legen? Wie würde das gemacht werden?Django: Befehle zur Aufteilung der Verwaltung in Unterordner

+1

Können Sie mehr Details zu Ihrem Problem angeben? Ist es das, wonach Sie suchen? https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – Marat

+0

Ich möchte Befehle in Unterordner von app/management/befehle setzen. Ich habe der Frage mehr Details hinzugefügt. –

Antwort

5

Unglücklicherweise scheint es seit Django 1.4 keine Möglichkeit mehr zu geben. Die Quellen für django.core.management.__init__.py haben diese Methode:

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

Wie Sie sehen können, es hält nur die Dateien direkt im commands Ordner, Unterordner ignorieren. wenn Sie „Affen-Patch“ Allerdings ist diese Funktion irgendwie sollte der Rest des Codes funktionieren, da der Code, der tatsächlich schafft die Command Beispiel ist dies:

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

Also, wenn Sie einen Befehl hatte subfolder.command es benannt würde das richtige Skript laden und die richtige Klasse instanziieren.

Vom praktischen Standpunkt sehe ich jedoch keine Verwendung davon. Sicher, "namespace'd" -Befehle zu haben, wäre nett, aber Sie können allen Ihren Befehlen immer einen Namen geben, wenn Sie wollen, und etwas anderes als Trennzeichen verwenden (zB _). Die Länge des Befehlsnamens - und die Anzahl der Tastenanschläge, die benötigt werden, um sie in das Terminal einzugeben - ist gleich ...

Verwandte Themen