Tornado 文檔中提到但是這樣只能捕獲到handlers中列出的路徑請求中的錯誤。
如果只定義了(r"/hello", HelloHandler) 一條規則,那么只能捕獲到 /hello/other,這樣的未定義路徑請求,而像/he、/helloworld、/he/other這樣的會直接顯示Tornado默認的404錯誤頁面,而不會顯示自定義的錯誤頁面。
解決方法很簡單只需要在路由規則的最后加一條(r".*", BaseHandler),用于捕獲未被其他規則捕獲的所有請求,然后覆寫get方法,并在方法中調用自定義的write_error方法。 例:
代碼如下:
class BaseHandler(tornado.web.RequestHandler):
def get(self):
self.write_error(404)
def write_error(self, status_code, **kwargs):
if status_code == 404:
self.render('public/404.html')
elif status_code == 500:
self.render('public/500.html')
else:
self.write('error:' + str(status_code))
新聞熱點
疑難解答