Pourquoi puis-je obtenir TypeError: get() prend exactement 2 arguments (1 donnée)? Google App Engine
J'ai essayé et essayé pendant plusieurs heures maintenant et il doit y avoir un moyen facile de récupérer l'url. Je pensais que c'était le moyen:
#from data.models import Program
import basehandler
class ProgramViewHandler(basehandler.BaseHandler):
def get(self,slug):
# query = Program.all()
# query.filter('slug =', fslug)
self.render_template('../presentation/program.html',{})
Lorsque ce code est exécuté, j'obtiens cette erreur sur la stacktrace:
appengine\ext\webapp__init__.py" de ligne, 511, dans appel
gestionnaire d'.get(*groupes)
TypeError: get() prend exactement 2 arguments (1 donnée)
J'ai fait un peu de débogage, mais ce genre de débogage dépasse mon niveau de débogage. Quand j'enlève le slug de def get(self,slug) tout fonctionne très bien.
C'est le basehandler:
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
class BaseHandler(webapp.RequestHandler):
def __init__(self,**kw):
webapp.RequestHandler.__init__(BaseHandler, **kw)
def render_template(self, template_file, data=None, **kw):
path = os.path.join(os.path.dirname(__file__), template_file)
self.response.out.write(template.render(path, data))
Si quelqu'un pouvait me diriger dans la bonne direction, il serait grand! Merci!!!! C'est la première fois pour moi d'utiliser stackoverflow pour poster une question, normalement je n'ai lu que pour résoudre les problèmes que j'ai.
- Votre BaseHandler de init est également trompe - il devrait être
super(BaseHandler, self).__init__(**kw)
- mais étant donné qu'il ne fait pas faire quoi que ce soit, il n'y a pas besoin de le remplacer dans la première place.
Vous devez vous connecter pour publier un commentaire.
Vous obtenez cette erreur, car
ProgramViewHandler.get()
est appelé sans leslug
paramètre.Le plus probable, vous avez besoin de fixer les mappages d'URL dans votre
main.py
fichier. Votre mappage d'URL doit probablement ressembler à quelque chose comme ceci:Les parenthèses indiquent une expression régulière groupement. Ces appariés groupes sont passés à votre gestionnaire comme arguments. Ainsi, dans l'exemple ci-dessus, tout est dans l'URL après le premier "/" sera transmise à
ProgramViewHandler.get()
'sslug
paramètre.En savoir plus sur les mappages d'URL dans webapp ici.
r
préfixe indique que la chaîne de caractères littérale est une raw littéral de chaîne. Premières chaînes fondamentalement traiter les barres obliques inverses comme n'importe quel autre caractère à la place des séquences d'échappement (sauf vous peut encore échapper à un guillemet qui serait autrement le signal de la fin de la chaîne de caractères littérale). Ils sont souvent utilisés lors de la spécification des expressions régulières parce que la syntaxe de ces fait un usage intensif des barres obliques inverses. Dans l'exemple que j'ai fourni, ler
ne fait aucune différence car il n'existe pas de barres obliques inverses dans la chaîne littérale.Si vous faites cela:
La méthode foo sur Maclasse est appelée avec deux arguments:
L'objet sur lequel elle est appelée, est passé comme premier paramètre.
Peut-être vous êtes l'appel de get() de manière statique (c'est à dire faire
ProgramViewHandler.get()
au lieu demyViewHandlerVariable.get()
), ou vous êtes un paramètre manquant.