2012-08-25 12 views
5

Django管理コマンドのドキュメントには、app/management/commandsフォルダに作成されるすべてのコマンドが表示されています。 app/management/commands/installやapp/management/commands/maintenanceなどのサブフォルダにコマンドを置くことは可能ですか?これはどのようにして行われますか?Django:サブフォルダへの管理コマンドの分割

+1

あなたの問題に関する詳細を教えてください。それはあなたが探しているものですか? https://docs.djangoproject.com/en/dev/howto/custom-management-commands/ – Marat

+0

私はapp/management /コマンドのサブフォルダにコマンドを入れたいと思っています。私はその質問にもっと詳細を加えました。 –

答えて

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にそれを命名します正しいスクリプトをロードし、適切なクラスをインスタンス化します。

しかし、実用的な観点からは、私はそれを使用していません。確かに、 "namespace'd"コマンドを使用すると便利ですが、必要に応じてすべてのコマンドに接頭辞を付け、セパレータとして別のもの(例えば_など)を使用することができます。コマンド名の長さと、端末に入力するのに必要なキーストロークの数は同じになります...

関連する問題