为什么我会得到 TypeError: get() 需要两个参数(给了一个)?Google App Engine

6 投票
2 回答
13159 浏览
提问于 2025-04-16 00:26

我已经尝试了好几个小时,感觉应该有个简单的方法来获取这个网址。我原以为这样做是对的:

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

每次执行这段代码时,我都会在错误信息中看到这个提示:

appengine\ext\webapp__init__.py", 第511行,在 call 中 handler.get(*groups) TypeError: get() 需要两个参数(我只给了一个)

我做了一些调试,但这种调试超出了我的能力范围。当我把def get(self,slug)中的slug去掉时,代码就能正常运行。

这是基本处理程序:

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

如果有人能给我指个方向,那就太好了!谢谢!这是我第一次在stackoverflow上发问,通常我只是上去看看解决我遇到的问题。

2 个回答

1

如果你这样做:

obj = MyClass()
obj.foo(3)

MyClass里的foo方法被调用时,会传入两个参数:

def foo(self, number)

调用这个方法的对象会作为第一个参数传进去。

可能你是以静态方式调用get()方法(也就是说,你用的是ProgramViewHandler.get()而不是myViewHandlerVariable.get()),或者你漏掉了一个参数。

9

你看到这个错误是因为 ProgramViewHandler.get() 被调用时没有提供 slug 参数。

很可能你需要在你的 main.py 文件中修正一下网址的设置。你的网址设置应该大概是这样的:

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

括号表示这是一个正则表达式的分组。这些匹配到的部分会作为参数传递给你的处理程序。所以在上面的例子中,网址中第一个 "/" 后面的所有内容都会传递给 ProgramViewHandler.get()slug 参数。

想了解更多关于网址设置的内容,可以在 webapp 的 这里查看。

撰写回答