2013-04-19 6 views
8

私はちょうどdjangoをインストールしました。私は彼らのウェブサイトでチュートリアルをやっています。manage.pyはどのように機能しますか?

私はコマンドラインの指示に従っていますが、動作していますが、なぜ私は不思議に思っていますか?

たとえば、 'manage.py startapp xyz'コマンドにアクセスするとパッケージが作成されますが、manage.pyを調べると、次のコードしか含まれません(djangoによって追加されました。 touch manage.py)

#!/usr/bin/env python 
import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "DjangoProject12.settings") 

    from django.core.management import execute_from_command_line 

    execute_from_command_line(sys.argv) 

私はmanageappや他のどの場所でもstartappの方法はありません。私はこれがジャンゴ固有のものか、私のpythonの知識にいくつかの基本的なギャップがあるかどうかは分かりません。ありがとうございました。

+4

あなたは 'execute_from_command_line()'コードを見ましたか? – monkut

+0

申し訳ありませんが、私は間違いました。私はコマンドラインではなく、Eclipseのpydevのdjangoプラグインを介してこれらのコマンドを実行しています。私はコマンドを入力し、出力として取得します。「C:\ Users \ zyz \ workspace \ DjangoProject12 \ src \ manage.py startapp zxz」の実行が完了しました。 – user856358

+0

Eclipseはあなたの詳細を隠すだけです。実際には、コマンドラインのような環境からmanage.pyを呼び出すので(詳細はわかりません)、manage.pyはコマンドライン – J0HN

答えて

9

django.core.management packageを参照する必要があります。 execute_from_command_line() functionsys.argvコマンドラインパラメータを受け取り、そこから取得します。

manage.py startapp xyzをコマンドラインに入力すると、sys.argv['manage.py', 'startapp', 'xyz']に設定されます。

これらはManagementUtility instanceに転送されます。これは実際の解析を行うために.execute() methodです。

django.core.managementパッケージ全体はモジュラ式です。 .commands sub packageにはmanage.pyツールのさまざまな標準コマンドが含まれています。 django.core.management.commands.startappは、たとえばサブコマンドstartappを処理します。

関連する問題