2010-11-17 8 views
14

Django doktor bir örnek vasıtasıyla, nasıl benim django özel yönetim komutuna bir seçenek eklemek için söyle: Django özel yönetim komutu seçeneğini nasıl kullanır?

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'), 
    ) 

Sonra belgeler sadece dur. Kullanıcının --delete seçeneğini sağlayıp sağlamadığını kontrol etmek için bu sınıfın bir handle yöntemini nasıl yazması gerekir? Zaman zaman Django

cevap

19

:-(zor kolay şeyler Böyle yapabilirsin yapar.

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') 

Eğer **kwargs kullanarak bu işleyebilir böylece Python bazı anahtar kelimeler saklıdır unutmayın yapın Aksi takdirde kullanabilirsiniz Normal argümanlar (ı close yaptığı gibi)

+1

Ayrılmış sözcük 'del' dir. 'Sil' değişken adı olarak izin verilir. –

+0

Bu konuya gelen diğer kullanıcılar için, bu kaynak da bana yardımcı oldu: http://www.alexonlinux.com/pythons-optparse-for-human-beings#telling_optparse_to_parse_arguments –

7

(komuta make_option ve in) varsayılan değerleri komutları tanımlayan (anahtar adı, dest) ve taşıma konusunda biraz öneri:

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) 

Django kodunda, daha anlamlı olan (bu adlandırma kuralına bağlı kaldığım) "anahtar kelime bağımsız değişkenleri" (**kwargs) genellikle **options olarak adlandırılır.

Varsayılan değer, make_option öğesinde ya da yöntemi, aracılığıyla bir varsayılan değere izin verilebilir. neden yok

değil u hem varsayılan değerlerini kullan **options Sözlük Bu girdi eksik olabilir nerede Command.handle yöntem, elle çağrılmalıdır.