Kristian Damian
Kristian Damian

Reputation: 1356

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

Upvotes: 6

Views: 2717

Answers (2)

Nick Johnson
Nick Johnson

Reputation: 101149

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)

Upvotes: 9

Jackson Miller
Jackson Miller

Reputation: 1510

Piggy backing on Derek Dahmer's answer (I don't have the karma to leave comments), you can then add this to Throw404 to send the proper header:

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

Upvotes: 0

Related Questions