在 App Engine 中处理代码抛出的 404

6 投票
2 回答
2711 浏览
提问于 2025-04-15 18:30

我处理“真正的”404错误的方式是这样的:

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

但是在我代码的某些地方,我会抛出一个404错误

self.error(404)

我想显示之前提到的同一页面,有没有办法捕捉到这个404错误并进行处理呢?

我可以重定向到一个不存在的链接,但看起来很难看。

2 个回答

0

在Derek Dahmer的回答基础上(我没有足够的积分来留言),你可以把这个添加到Throw404中,以发送正确的头信息:

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

最简单的方法就是在你的基础处理器上重写 error() 方法(假设你有一个基础处理器),这样就可以生成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)

撰写回答