0

Django の管理コマンドを作成しようとしていますが、問題が発生しました。option_list変数は、フラット化されたオプションのリストである必要があるようです。

簡潔にするために編集されたコードは次のとおりです。実行されます。

def add_options(self, parser):
    group = OptionGroup(parser, "Global Options")
    group.add_option("--logfile", metavar="FILE", \
        help="log file. if omitted stderr will be used")
    ...
    ...
    ...
    group.add_option("-s", "--set", action="append", default=[], metavar="NAME=VALUE", \
        help="set/override setting (may be repeated)")
    parser.add_option_group(group)
    parser.add_option("-t", "--output-format", metavar="FORMAT", default="jsonlines", \
        help="format to use for dumping items with -o (default: %default)")

すべてのオプション変数を取得し、フラット化してから、オプションを保持しながら をparser削除し、それらを新しい変数に入れる必要があります。OptionGroup

Django には、このようなオプションを指定するクラスが必要です。これにより、反復処理が可能になります。

option_list = (
    make_option('-v', '--verbosity', action='store', dest='verbosity', default='1',
        type='choice', choices=['0', '1', '2', '3'],
        help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output'),
    make_option('--settings',
        help='The Python path to a settings module, e.g. "myproject.settings.main". If this isn\'t provided, the DJANGO_SETTINGS_MODULE environment variable will be used.'),
    make_option('--pythonpath',
        help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".'),
    make_option('--traceback', action='store_true',
        help='Print traceback on exception'),
)

これを達成する方法に非常に迷っています。

4

2 に答える 2

3

option_list属性を使用してオプションを取得できます。

>>> print parser.option_list
[<Option at 0x7f938c8243f8: -h/--help>, <Option at 0x7f938c82b3f8: -t/--output-format>]

残念ながら、それはオプション グループを見逃してしまいます。そのためには、さらにグループを反復処理する必要があります。次に、次のようなことができます (未テスト):

for group in parser.option_groups:
    option_list += tuple(group.option_list)
option_list += tuple(parser.option_list)

これにより、オプションのグループ化が失われますが、それが必要な場合は、そこに到達するためにさまざまなことをいじることができます。

つまり、属性option_listoption_groups属性を使用するだけです。自分自身を見つける方法:dir(parser)最も適切な属性を使用して探します。あとは試行錯誤です。

于 2012-10-23T09:01:39.467 に答える
0

次のようなオプションを追加できるはずです。

option_list += (
    make_option("--logfile", metavar="FILE", \
        help="log file. if omitted stderr will be used"),
    make_option("-s", "--set", action="append", default=[], metavar="NAME=VALUE", \
        help="set/override setting (may be repeated)"),
)
于 2012-10-23T08:26:11.793 に答える