32

私のdjangoアプリでは、渡された引数に基づいてオブジェクトのインスタンスを作成し、オプション--saveが渡されたかどうかに基づいてデータベースに保存するオプションを持つカスタム管理コマンドを書いています。

これについては、 django のドキュメント自体から多くの助けを得ています。また、ここから複数の引数を渡す方法について、およびオプションを使用する方法についてここから重要な指針を得ました。

from optparse import make_option

class Command(BaseCommand):
  option_list = BaseCommand.option_list + (
    make_option('--delete',
        action='store_true',
        dest='delete',
        default=False,
        help='Delete poll instead of closing it'),
    )

  def handle(self, *args, **options):
    # ...
    if options['delete']:
        poll.delete()
    # ...

ただし、make_option のフィールドの詳細な説明を見つけることができません。たとえば、optparse.make_optionリスト

Instance attributes:
_short_opts : [string]
_long_opts : [string]

action : string
type : string
dest : string
default : any
nargs : int
const : any
choices : [string]
callback : function
callback_args : (any*)
callback_kwargs : { string : any }
help : string
metavar : string

これhelpは自明でありdest、意味はわかりましたが、意味がわかりませんaction='store_true'。実際、誰かがすべての引数が何を意味するのかを簡単に説明してくれたら素晴らしいと思いますmake_option...

どうもありがとう

4

2 に答える 2

34

ドキュメントからの make_option の説明http://docs.python.org/2/library/optparse.html#populating-the-parser

make_option() は Option インスタンスを作成するためのファクトリ関数です。現在、これは Option コンストラクターのエイリアスです。optparse の将来のバージョンでは Option がいくつかのクラスに分割される可能性があり、make_option() はインスタンス化する適切なクラスを選択します。Option を直接インスタンス化しないでください。

これらはすべて可能なオプション属性です:

http://docs.python.org/2/library/optparse.html#option-attributes

django 管理コマンドでの一般的な使用:

class Command(BaseCommand):
    help = "Command to import a list of X"
    option_list = BaseCommand.option_list + (
        make_option(
            "-f", 
            "--file", 
            dest = "filename",
            help = "specify import file", 
            metavar = "FILE"
        ),
    )

    option_list = option_list + (
        make_option(
            "-s", 
            "--slug", 
            dest = "category",
            help = "category slug", 
            metavar = "SLUG"
        ),
    )

    def handle(self, *args, **options):
            # make sure file option is present
            if options['filename'] == None :
                raise CommandError("Option `--file=...` must be specified.")
        
            # make sure file path resolves
            if not os.path.isfile(options['filename']) :
                raise CommandError("File does not exist at the specified path.")
    
            # make sure form option is present
            if options['category'] == None :
                raise CommandError("Option `--slug=...` must be specified.")
于 2012-10-31T13:22:51.567 に答える
20

optparseドキュメントはもう少し役立つかもしれません。基本的に、必要な各オプションが何をすべきかを管理機能に伝えています。

キーワードは最もactionわかりやすく、そのオプションで何をしたいかを構成します-それは特別なことをするための単なるフラグ(a callback、すなわち'--enable-feature')であるか、またはパラメータを受け入れる必要があります(store、すなわち'-もの10')。

それを念頭に置いて、残りのオプションはすべてを念頭に置いてもう少し理にかなっています。「オプション属性」を読んでリストした内容の説明を取得し、次に「アクション」を読んで上記の内容を確認します

于 2012-10-31T13:04:52.633 に答える