2010-01-26 4 views
5

gestisco i "veri" 404 errori in questo modo:Maneggiare 404 tiro dal codice in AppEngine

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

Ma in alcune parti del mio codice butto un errore di 404

self.error(404) 

e io vuoi mostrare la stessa pagina che ho menzionato prima, c'è un modo per catturare l'errore 404 e gestirlo?

posso reindirizzare ad alcuni URL inesistente, ma sembra brutto

risposta

9

il modo più semplice per farlo è quello di sovrascrivere il metodo error() sul vostro gestore di base (presumendo che ne avete uno) per generare la pagina 404, e chiamare tale da gestori di regolari e la vostra 404 gestore. Ad esempio:

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

Meraviglioso. Grazie per la condivisione! – PEZ

0

trasporta sulle spalle sulla risposta di Derek Dahmer (non ho il karma di lasciare commenti), è possibile aggiungere questo al Throw404 per inviare l'intestazione corretta :

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