谷歌appengine重写问题

时间:2011-04-25 15:17:47

标签: python google-app-engine rewrite

如何为python重写url:

http://localhost:8081/?page=1

http://localhost:8081/1

这是我的代码,但它不起作用:

class MainPage(webapp.RequestHandler):
    def get(self, page):
        mypage = self.request.get('page')
        self.response.headers['Content-Type'] = 'text/plain'
        if mypage == "":
            self.response.out.write('Hello, webapp World!')
        else:
            self.response.out.write('page is ' + mypage)


application = webapp.WSGIApplication([('/', MainPage),('/(\d+)', MainPage)], debug=True)

3 个答案:

答案 0 :(得分:4)

您可以在控制器中使用正则表达式。这不是Apache风格的URL重写本身,但它完成了工作。重写的参数作为参数传递给处理程序。

class MyRequestHandler(webapp.RequestHandler):
    def get(self, page):
        self.response.headers['Content-Type'] = 'text/plain'
        if not page:
            self.response.out.write('Hello, webapp World!')
        else:
            self.response.out.write('page is ' + page)

url_map = [('/(\d+)', MyRequestHandler)]
application = webapp.WSGIApplication(url_map, debug=True)

有关类似的申请,请参阅How to configure app.yaml to support urls like /user/<user-id>?

答案 1 :(得分:1)

假设您正在使用webapp:

class Rewriter(webapp.RequestHandler):
    def get(self):
        self.redirect(self.request.get('page'))

application = webapp.WSGIApplication([('/', Rewriter)],)
def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()

答案 2 :(得分:1)

您为MainPage处理程序定义了两个映射,一个不传递任何参数('/'),另一个传递一个参数('/(\ d +)')。但是,您的处理程序只需要一个名为page的参数。

您需要使用两个不同的处理程序,或者为page参数提供默认值,如下所示:

class MainPage(webapp.RequestHandler):
    def get(self, page=None):
        if not page:
          self.redirect('/%s', self.request.get('page'))
          return
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('page is ' + mypage)

为了将来参考,当您获得堆栈跟踪时,请将其包含在您的问题中!说“它不起作用”并让我们确切地猜出出了什么问题并不是一个很好的方法来获得有用的问题答案。

相关问题