为什么我会得到 TypeError: get() 需要两个参数(给了一个)?Google App Engine
我已经尝试了好几个小时,感觉应该有个简单的方法来获取这个网址。我原以为这样做是对的:
#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 的 这里查看。