2010-11-26 8 views

Répondre

-2
import urllib 
url = urllib.urlopen('www.google.com/testing') #a 404 address 
if url.code == 404: 
    url = urllib.urlopen('www.google.com') 

Lorsqu'un urlobject est créé l'instance .code renvoie le code de la page,

3
@error(404) 
def error404(error): 
    from bottle import redirect 
    # maybe test the error to see where you want to go next? 
    redirect(new_url, 303) # HTTP 303 should be used in this case 

EDIT Je ne suis pas 100% sûr que cela peut être fait, et je ne peux pas Testez-le maintenant, mais je vais le tester plus tard et mettre à jour la réponse à moins que vous ne me battiez dessus.

+0

Quelle version de bouteille utilisez-vous? J'ai des problèmes avec la gestion des erreurs en bouteille - je pense que les docs ne sont pas à jour avec le code. J'ai essayé le code de redirection ci-dessus en utilisant la bouteille 0.9.dev et ai obtenu un code de réponse 500 et l'affichage "Erreur critique" Erreur: HTTPResponse ('HTTP Response 303',) – cnk

+0

Désolé pour le retard, était hors de StackOverflow pendant un moment. L'exemple fait référence à la version HEAD de Git. Il a peut-être changé entre-temps, mais j'en doute. Avez-vous vérifié l'erreur exacte dans votre application? 500 suggèrent généralement des erreurs dans votre code. – hayavuk

2
@app.error(404) 
    def error(err): 
     bottle.response.status = 303 
     bottle.response.header['Location'] = '/' 
+1

Pouvez-vous expliquer pourquoi cela fonctionne plutôt que de simplement donner puis répondre? – ArtB

Questions connexes