2010-01-03 14 views
13

par exemple, dire que j'ai mon module d'index de cherrypy mis en place comme celui-ciComment puis-je forcer Cherrypy à accepter un nombre variable de paramètres GET?

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

>>> cherrypy.quickstart(test()) 

Si je vous envoie plus d'un paramètre GET je reçois cette erreur

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

Veuillez n'accepter ma réponse et accepter la bonne réponse de Coady afin que je puisse supprimer le mien. –

Répondre

1

Pour toute généralité, changer

def index(self, var = None): 

à

def index(self, *vars): 

vars sera lié à un tuple, qui est vide si aucun argument n'a été passé, a un élément si un argument a été passé, deux si deux, et ainsi de suite. Il revient alors à votre code de traiter de tels cas de manière sensée et appropriée, bien sûr.

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

ou

def index(self, **params): 

'var2' sera une clé dans la params dict. Dans le second exemple, il en sera de même pour 'var'. Notez que les autres réponses qui font référence à la syntaxe * args ne fonctionneront pas dans ce cas, car CherryPy passe les paramètres de requête en tant qu'arguments de mot-clé, et non en tant qu'arguments positionnels. D'où vous avez besoin de la syntaxe **.