2010-01-03 4 views
13

zum Beispiel sagen, dass ich meine cherrypy Indexmodul haben wie dieseWie kann ich erzwingen, dass cherrypy eine variable Anzahl von GET-Parametern akzeptiert?

>>> import cherrypy 
>>> class test: 
     def index(self, var = None): 
      if var: 
       print var 
      else: 
       print "nothing" 
     index.exposed = True 

>>> cherrypy.quickstart(test()) 

einrichten Wenn ich mehr als einen GET-Parameter sende ich diesen Fehler

404 Not Found

Unexpected query string parameters: var2

Traceback (most recent call last):
File "C:\Python26\lib\site-packages\cherrypy_cprequest.py", line 606, in respond cherrypy.response.body = self.handler() File "C:\Python26\lib\site-packages\cherrypy_cpdispatch.py", line 27, in call test_callable_spec(self.callable, self.args, self.kwargs) File "C:\Python26\lib\site-packages\cherrypy_cpdispatch.py", line 130, in test_callable_spec "parameters: %s" % ", ".join(extra_qs_params)) HTTPError: (404, 'Unexpected query string parameters: var2')

Powered by CherryPy 3.1.2

+2

Bitte akzeptieren Sie meine Antwort und akzeptieren Sie die richtige Antwort von Coady, damit ich meine löschen kann. –

Antwort

1

Für eine vollständige Allgemeinheit ändern

def index(self, var = None): 

zu

def index(self, *vars): 

vars wird an ein Tupel gebunden, das leer ist, wenn keine Argumente übergeben wurden, hat ein Element, wenn ein Argument übergeben wurde, zwei wenn zwei, und so weiter. Es liegt dann an Ihrem Code, mit verschiedenen solchen Fällen natürlich sinnvoll und angemessen umzugehen.

31
def index(self, var=None, **params): 

oder

def index(self, **params): 

'var2' wird ein Schlüssel in der params dict sein. Im zweiten Beispiel wird das auch "var".

Beachten Sie, dass die anderen Antworten, die auf die * args-Syntax verweisen, in diesem Fall nicht funktionieren, da CherryPy Abfrageparameter als Schlüsselwortargumente und nicht als Positionsargumente übergibt. Daher benötigen Sie die ** Syntax.

Verwandte Themen