2010-01-26 20 views
5

我用這種方式管理「真正的」 404錯誤:處理404投用代碼的AppEngine

application = webapp.WSGIApplication([ 
    ('/', MainPage),  
    #Some others urls 
    ('/.*',Trow404) #I got the 404 page 
],debug=False) 

但在我的代碼一些地方我拋出一個404錯誤

self.error(404) 

和我想要顯示之前提到的相同頁面,有什麼方法可以捕獲404錯誤並進行管理?

我也可以把一些不存在的網址,但看起來醜陋

回答

9

要做到這一點,最簡單的方法是重寫你的基本處理程序錯誤()方法(假設你有一個)來生成404頁,並調用從常規的處理程序和你的404處理器。例如:

class BaseHandler(webapp.RequestHandler): 
    def error(self, code): 
    super(BaseHandler, self).error(code) 
    if code == 404: 
     # Output 404 page 

class MyHandler(BaseHandler): 
    def get(self, some_id): 
    some_obj = SomeModel.get_by_id(some_id) 
    if not some_obj: 
     self.error(404) 
     return 
    # ... 

class Error404Handler(BaseHandler): 
    def get(self): 
    self.error(404) 
+0

很好。感謝分享! – PEZ 2010-02-04 20:08:11

0

小豬德里克·達默的回答支持(我沒有善緣留下意見),你可以再加入這Throw404發送適當的報頭:

class Throw404(webapp.RequestHandler): 
    def get(self): 
    self.error(404) 
    # your 404 handler goes here