pet*_*108 15 django django-manage.py
Django doc告诉我如何通过一个例子为我的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'),
)
Run Code Online (Sandbox Code Playgroud)
然后文档就停止了.如何编写handle
此类的方法来检查用户是否提供了--delete
选项?有时Django很容易让事情变得困难:-(
Wol*_*lph 19
你可以这样做:
from optparse import make_option
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--del',
action='store_true',
help='Delete poll'),
make_option('--close',
action='store_true',
help='Close poll'),
)
def handle(self, close, *args, **kwargs):
del_ = kwargs.get('del')
Run Code Online (Sandbox Code Playgroud)
请注意,Python中的某些关键字是保留的,因此您可以处理这些关键字**kwargs
.否则你可以使用普通参数(就像我做的那样close
)
关于定义命令(键名称dest
)和处理默认值(在make_option
命令中和命令中)的一点建议:
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--del',
action='store_true',
help='Delete all polls.',
dest='your_name_for_delete',
default=False),
make_option('--close',
action='store_true',
help='Close all polls.'),
)
def handle(self, close, *args, **options):
if options.get('your_name_for_delete'):
Poll.objects.delete()
if options.get('close', False):
Poll.objects.update(closed=True)
Run Code Online (Sandbox Code Playgroud)
在Django代码中,你会发现"关键字参数"(**kwargs
)经常被命名为**options
,这更具暗示性(我坚持这个命名约定).
默认值可以在make_option中指定dict.get
,也可以通过允许默认值的方法指定.
如果您的方法是手动调用的话,没有理由不使用这两个默认值,字典可能会缺少此条目.Command.handle
**options
归档时间: |
|
查看次数: |
10262 次 |
最近记录: |