2011-04-25 95 views
4

我怎麼可以重寫URL爲Python:谷歌的AppEngine重寫問題

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) 
+0

如果你想添加更多的代碼,請[編輯你的問題](http://stackoverflow.com/posts/5779879/edit)。在評論中轉儲代碼通常不會有幫助。 – Will 2011-04-26 12:25:24

回答

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>?對於類似的應用。將在一個參數傳遞

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() 
+0

這是我的代碼,但它不工作? ('self','page') self.response.headers ['Content-Type'] ='text/plain' 如果我的空間== 「」: self.response.out.write( '你好,世界的webapp!') 其他: self.response.out.write( '頁面' +我的空間) 應用= Web應用程序.WSGIApplication([('/',MainPage),('/(\ d +)',MainPage)],debug = True) – Duan 2011-04-26 03:58:14

+0

當你像這樣使用正則表達式匹配時,參數直接傳遞給處理程序,的請求。而不是'self.request.get('page')',只需使用'page'。 – 2011-04-26 11:27:14

+0

你喜歡那個self.request.get(page)嗎? – Duan 2011-04-26 14:20:06

1

假設你正在使用的webapp ( '/(\ 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) 

以供將來參考,當你得到一個堆棧跟蹤,包括在您的問題!說「這不起作用」,並讓我們猜測到底發生了什麼問題並不是獲得有用答案的好方法。

+0

這個問題並不完全清楚,但我認爲Duan正在詢問如何爲最終用戶製作「漂亮」的網址。 – 2011-04-25 15:45:38

1

您爲MainPage處理程序定義了兩個映射,一個會在沒有任何參數(「/」)通過和一個: