2010-01-26 9 views
5

administro los errores 404 "reales" de esta manera:Handle 404 tiro por código en appengine

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

embargo, en algunas partes de mi código lanzo un error de 404

self.error(404) 

y yo Quiero mostrar la misma página que mencioné antes, ¿hay alguna forma de detectar el error 404 y administrarlo?

puedo redirigir a alguna URL inexistente, pero se ve feo

Respuesta

9

la forma más sencilla de hacerlo es reemplazar el método de error() en el controlador de base (suponiendo que tiene uno) para generar la página 404, y llamar a que a partir de sus manipuladores regulares y el controlador 404. Por ejemplo:

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

Maravilloso. ¡Gracias por compartir! – PEZ

0

que llevan a cuestas sobre la respuesta de Derek Dahmer (no tengo el karma para comentar), a continuación, puede agregar esto a Throw404 para enviar la cabecera adecuada :

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