2010-11-17 12 views
14

Der Django doc mir sagen, wie eine Option, um meinen django benutzerdefinierten Management-Befehl hinzufügen, über ein Beispiel:Wie verwendet man die benutzerdefinierte Befehlsoption 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'), 
    ) 

Dann wird die Dokumente einfach aufhören. Wie würde man die handle Methode für diese Klasse schreiben, um zu überprüfen, ob der Benutzer eine --delete Option zur Verfügung gestellt hat? Manchmal macht Django die einfachen Dinge schwierig :-(

Antwort

19

Sie können es tun, wie folgt:.

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

Sie beachten, dass einige Schlüsselwörter in Python reserviert sind, so dass Sie diejenigen mit **kwargs umgehen können Ansonsten können Sie verwenden normale Argumente (wie ich mit close tat)

+1

Das reservierte Wort ist 'del'. 'delete' ist als Variablenname erlaubt. –

+0

Für andere, die zu diesem Thema kamen, half mir diese Ressource auch: http://www.alexonlinux.com/pythons-optparse-for-human-beings#telling_optparse_to_parse_arguments –

7

Ein kleiner Vorschlag über die Befehle (Schlüsselname, dest) Definition und Handhabung Standardwert (in make_option und im Befehl):

In Django-Code finden Sie "Schlüsselwortargumente" (**kwargs) oft als **options benannt, was suggestiver ist (ich bleibe bei dieser Namenskonvention).

Der Standardwert kann entweder in make_option oder über die dict.get-Methode angegeben werden, die einen Standardwert zulässt.

Es gibt keinen Grund, nicht u verwenden beiden Standardwerte, sollen Sie Ihre Command.handle Methoden manuell aufgerufen werden, in dem der **options Wörterbuch diesen Eintrag fehlt könnte.

Verwandte Themen