2015-04-08 65 views
3

我怎樣才能做到這一點,我是新來的Python和燒瓶,我想我404到外部URL重定向這樣的:如何重定向到一個外部的404頁蟒蛇燒瓶

@app.route('404') 
def http_error_handler(error): 
return flask.redirect("http://www.exemple.com/404"), 404 

但不起作用我得到

找不到 在服務器上找不到請求的URL。如果您手動輸入網址,請檢查拼寫並重試。

+0

問題可能是您通過重定向傳遞的404狀態。 –

回答

5

你應該嘗試這樣的事:

from flask import render_template 

@app.errorhandler(404) 
def page_not_found(e): 
    return render_template('404.html'), 404 

來源http://flask.pocoo.org/docs/0.10/patterns/errorpages/

+0

我沒有在同一個項目上的404.html文件,我需要重定向到另一個網站,仍然有我的404狀態碼,我已經多次查看文檔.. – Phosy

+1

那麼你不必實際重定向到模板,像這樣做返回重定向(「http://www.example.com」,代碼= 302) – lapinkoira

+0

它只是一個示例來展示如何處理錯誤,然後在你內部做你想做的任何事 – lapinkoira

4

你不能做到這一點 - 用戶代理(在大多數情況下,瀏覽器)着眼於狀態代碼返回以確定要執行的操作。當您返回404狀態碼時,您對用戶代理所說的是「我不知道您要求的是什麼東西」,然後用戶代理可以:

  • 顯示您返回的內容在響應的主體
  • 顯示其自己的錯誤消息發送到所述終端用戶
  • 執行的上述兩個方案

redirect實際上creates a little HTML response (via werkzeug.exceptions),其通常的端用戶不會看到,因爲一些組合用戶代理遵循Location頭部看到302響應。但是,當您提供自己的狀態碼(404)時,您將覆蓋狀態碼。

修復的方法是任一:

  • 卸下狀態代碼(在錯誤的信號發送到終端用戶的成本,潛在的)
  • 寄404 a meta:refresh and/or JavaScript redirect(略更好的,仍然混亂):

    return redirect("/where-ever"), 404, {"Refresh": "1; url=/where-ever"} 
    
1

嘗試,而不是RO這ute

@app.errorhandler(404) 
def own_404_page(error): 
    pageName = request.args.get('url') 
    print(pageName) 
    print(error) 
    f = open('erreur404.tpl') 
    return f.read()