Обрабатывать 404 броска по коду в appengine - PullRequest
6 голосов
/ 26 января 2010

Я управляю «настоящими» 404 ошибками следующим образом:

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

Но в некоторых частях моего кода я выбрасываю ошибку 404

self.error(404)

и я хочу показать ту же страницу, что упоминалась ранее, any есть ли способ отловить ошибку 404 и справиться с ней?

Я могу перенаправить на какой-то несуществующий URL, но выглядит ужасно

Ответы [ 2 ]

9 голосов
/ 28 января 2010

Самый простой способ сделать это - переопределить метод 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)
0 голосов
/ 27 января 2010

Копилка на ответ Дерека Дамера (у меня нет кармы, чтобы оставлять комментарии), затем вы можете добавить это в Throw404, чтобы отправить правильный заголовок:

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