Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle 404 throw by code in appengine

I manage the "real" 404 errors in this way:

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

But in some parts of my code i throw a 404 error

self.error(404)

and i wanna show the same page that mentioned before, ¿there is any way to catch the 404 error and manage it?

I can redirect to some inexistent url, but looks ugly

like image 850
Kristian Damian Avatar asked Jan 26 '10 19:01

Kristian Damian


1 Answers

The easiest way to do this is to override the error() method on your base handler (presuming you have one) to generate the 404 page, and call that from your regular handlers and your 404 handler. For example:

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)
like image 122
Nick Johnson Avatar answered Nov 13 '22 04:11

Nick Johnson