如何在Google App Engine python中向处理程序传递多个参数?

时间:2015-04-30 02:17:45

标签: python regex google-app-engine webapp2

我正在尝试构建一个能够查看以前编辑的wiki。每个wiki条目都有自己的相对URL路径,修订号在URL上附加'/ rev ='。

这是我的代码的一部分。

class WikiPage(MainHandler):
def get(self, url, num):
    num = int(num) if num else 0
    ...    # Display the wiki-entry with that revision number

PAGE = r'(/(?:[a-zA-Z0-9_-]+/?)*)'

app = webapp2.WSGIApplication([
    (r'/wiki' + PAGE + r'(?:/rev=(\d+))?', WikiPage),
    ...  # Other Handlers
], debug = True)

这可能不是最好的方法(例如。我可以使用查询来获取修订号,但我想知道如何以这种方式进行)

当我运行上面的代码时,我得到一个错误,指示get函数接受3个参数但仅提供2. url参数正确传递但未传递修订号。我也尝试将原始字符串中的组命名为num,但它仍然不起作用。

如果我能将2个或更多参数传递给我的处理程序,我将不胜感激。

编辑:根据JamieGómez的回答,我尝试修改我的程序,但我仍然无法使其工作(我收到404错误)。我也尝试使用未命名的参数,但无济于事。我没有正确实施吗?

class WikiPage(MainHandler):
    def get(self, **kw):
        url = kw.get('url')
        num = kw.get('num')
        num = int(num) if num else 0
        ...    # Display the wiki-entry with that revision number

PAGE = r'<url:/(?:[a-zA-Z0-9_-]+/?)*>'

app = webapp2.WSGIApplication([
    (r'/wiki' + PAGE + r'(?:/rev=<num:\d+>)?', WikiPage),
    ...  # Other Handlers
], debug = True)

3 个答案:

答案 0 :(得分:2)

格式看起来不对,请查看文档的这一部分:

The URL template

voter_id

答案 1 :(得分:0)

您可以使用webapp2.Route()。这里有一个例子(我仍在努力完全理解它,所以):https://github.com/svpino/blog-engine

答案 2 :(得分:0)

为什么不将rev作为请求参数传递,如

 /wiki?month=4&year=2015&rev=123

通过这种方式,您可以通过这种方式在处理程序中获取它

 self.request.get('rev')