2013-11-03 44 views
0

我在寫一個非常簡單的應用程序(URL縮寫器),它應該能夠將某些請求重定向到其他任意域。但是,我遇到了重定向問題。這種精簡版本,例如,不工作:重定向到Flask的外部域

from app import app, db 
from flask import abort, redirect 

@app.route('/') 
def index(): 
    return "Hello, world" 

@app.route('/favicon.ico') 
def favicon(): 
    abort(404) 

@app.route('/<slug>') 
def redirect(slug): 
    return redirect('http://google.com/') 

也許天真,我預計今年重定向到google.com,而是重定向似乎由瓶獲得「捕獲」,並嘗試通過重定向處理程序(例如redirect(slug="http://google.com/"))將重定向的URL重新路由回去,直到它通過遞歸和錯誤消除掉所有堆棧空間。我似乎無法弄清楚爲什麼會發生這種情況,或者如何解決這個問題,但我真的很欣賞一個指向正確方向的指針。

回答

2

的問題是在這個函數:

@app.route('/<slug>') 
def redirect(slug): 
    return redirect('http://google.com/') 

你命名的函數redirect(),所以當你調用return redirect(...)功能的應用範圍,被解釋爲一個遞歸調用,因爲該視圖功能陰影瓶的功能同名。並且您傳遞的URL映射到遞歸調用中的參數slug

將視圖函數的名稱從redirect()更改爲其他內容,您的代碼將正常工作。

+0

謝謝你,這是我非常愚蠢的錯過:)。 – Troy

+0

@Miguel謝謝你,我也犯了同樣的錯誤,愚蠢!就這樣浪費了1個小時。 – pregmatch