6 votes

Pourquoi est-ce que j'obtiens TypeError : get() prend exactement 2 arguments (1 donné) ? Moteur d'applications Google

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

Chaque fois que ce code est exécuté, j'obtiens cette erreur dans la trace de la pile :

appengine \ext\webapp__init__.py ", ligne 511, dans appelez handler.get(*groupes) TypeError : get() prend exactement 2 arguments (1 donné)

J'ai fait un peu de débogage, mais ce genre de débogage dépasse mon niveau de débogage. Lorsque j'enlève le slug de def get(self,slug) tout fonctionne bien.

C'est le gestionnaire de base :

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 m'indiquer la bonne direction, ce serait formidable ! Je vous remercie ! C'est la première fois que j'utilise stackoverflow pour poster une question, normalement je ne le lis que pour résoudre les problèmes que j'ai.

9voto

David Underhill Points 9356

Vous obtenez cette erreur parce que ProgramViewHandler.get() est appelé sans le slug paramètre.

Il est fort probable que vous deviez corriger les mappages d'URL dans votre site Web. main.py fichier. Votre mappage d'URL devrait probablement ressembler à quelque chose comme ceci :

application = webapp.WSGIApplication([(r'/(.*)', ProgramViewHandler)])

Les parenthèses indiquent un regroupement d'expressions régulières. Ces groupes correspondants sont transmis à votre gestionnaire en tant qu'arguments. Ainsi, dans l'exemple ci-dessus, tout ce qui se trouve dans l'URL après le "/" initial sera transmis à ProgramViewHandler.get() 's slug paramètre.

En savoir plus sur les mappages d'URL dans une webapp aquí .

1voto

Sjoerd Points 34671

Si vous faites ça :

obj = MyClass()
obj.foo(3)

La méthode foo de MyClass est appelée avec deux arguments :

def foo(self, number)

L'objet sur lequel il est appelé est passé comme premier paramètre.

Peut-être que vous appelez get() de manière statique (c'est-à-dire en faisant ProgramViewHandler.get() au lieu de myViewHandlerVariable.get() ), ou il vous manque un paramètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X