为什么我会得到TypeError:get()只需要2个参数(给定1个)?Google App Engine

Sam*_*nga 6 python google-app-engine web-applications

我一直在尝试和尝试几个小时,必须有一个简单的方法来检索网址.我以为这是这样的:

#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',{})
Run Code Online (Sandbox Code Playgroud)

每当执行此代码时,我都会在stacktrace上出现此错误:

appengine\ext\webapp__init __.py",第511行,在call handler.get(*groups)中TypeError:get()只取2个参数(给定1个)

我做了一些调试,但这种调试超出了我的调试水平.当我从def get(self,slug)中移除slug时,一切都运行良好.

这是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))
Run Code Online (Sandbox Code Playgroud)

如果有人能指出我正确的方向,那就太好了!谢谢!这是我第一次使用stackoverflow发布问题,通常我只是阅读它来解决我遇到的问题.

Dav*_*ill 9

您收到此错误ProgramViewHandler.get()是因为没有slug参数调用.

最有可能的是,您需要修复main.py文件中的URL映射.您的URL映射应该看起来像这样:

application = webapp.WSGIApplication([(r'/(.*)', ProgramViewHandler)])
Run Code Online (Sandbox Code Playgroud)

括号表示正则表达式分组.这些匹配的组作为参数传递给您的处理程序.所以在上面的例子中,一切都在URL中最初的"/"将被传递到下面ProgramViewHandler.get()slug参数.

此处了解有关webapp中URL映射的更多信息.