【问题标题】:WebApp2: TypeError: get() takes exactly 1 argument (2 given)WebApp2:TypeError:get() 只需要 1 个参数(给定 2 个)
【发布时间】:2017-09-15 02:09:21
【问题描述】:

用户注册后,我想重定向到带有 URL“../user/abcxyz”的欢迎页面,其中 abcxyz 将是用户名。但是在重定向页面上,我收到以下错误:

return method(*args, **kwargs)
TypeError: get() takes exactly 1 argument (2 given)

以下是代码的相关部分:

class Signup(MainHandler):
  ...
  ...
  # after successful signup redirect to welcome page 
  self.redirect('/user/%s' % username)

class WelcomeHandler(MainHandler):
   def get(self):
       self.render('welcome.html')

def render_str(template, **params):
    t = JINJA_ENVIRONMENT.get_template(template)
    return t.render(params)


class MainHandler(webapp2.RequestHandler):
    """ Class for handelling account register, login, etc."""

    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)

    def render_str(self, template, **params):
        return render_str(template, **params)

    def render(self, template, **kw):
        self.write(self.render_str(template, **kw))

app = webapp2.WSGIApplication([
(r'/', HomeHandler),
            (r'/user/(.*)', WelcomeHandler),
            (r'/signup', Signup)
        ], debug=True)

我经历了许多similar 之前提出的问题,但没有找到与我的问题相关的任何答案。请帮我解决这个错误。

【问题讨论】:

    标签: python-2.7 google-app-engine jinja2 webapp2


    【解决方案1】:

    这是因为您在路由正则表达式中使用了捕获组。

    (r'/user/(.*)', WelcomeHandler),
    

    这将捕获/user/ 之后的字符串,然后作为第二个参数传递给相应的请求方法getpost

    所以你必须修改相应处理程序中存在的请求方法,如下所示。

    class WelcomeHandler(MainHandler):
       def get(self, username):
           self.render('welcome.html')
    

    如果你想将username 传递给welcome.html 页面,那么

    def get(self, username):
        self.render('welcome.html', username=username)
    

    【讨论】:

    • 太棒了,谢谢。
    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2012-03-07
    相关资源
    最近更新 更多