2010-01-26 5 views
5

Je gère les "vrais" 404 erreurs de cette façon:poignée 404 jeter par code dans AppEngine

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

Mais dans certaines parties de mon code, je jette une erreur 404

self.error(404) 

et i Voulez-vous montrer la même page que celle mentionnée précédemment, ¿il y a un moyen d'attraper l'erreur 404 et de la gérer?

Je peux rediriger vers une URL inexistante, mais il semble laid

Répondre

9

la meilleure façon de le faire est de remplacer la méthode erreur() sur votre gestionnaire de base (en supposant que vous avez un) pour générer la page 404, et appeler de vos gestionnaires réguliers et votre gestionnaire 404. Par exemple:

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

Merveilleux. Merci d'avoir partagé! – PEZ

0

Piggy sauvegarde sur la réponse de Derek Dahmer (je n'ai pas le karma de laisser des commentaires), vous pouvez ajouter à Throw404 d'envoyer l'en-tête approprié :

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