2010-09-24 9 views
6

Sto creando un nuovo sito Web per sostituire quello corrente, utilizzando il micro-framework Flask (basato su Werkzeug) che utilizza Python (2.6 nel mio caso).Reindirizzare un vecchio URL a uno nuovo con micro-framework Flask

Le funzionalità principali e molte pagine sono le stesse. Tuttavia usando Flask molti degli URL precedenti sono diversi da quelli precedenti.

Ho bisogno di un modo per archiviare in qualche modo ciascuno dei vecchi URL e il nuovo URL, in modo che se un utente digita un vecchio URL vengono semplicemente inoltrati al nuovo URL e tutto funziona correttamente per loro.



Qualcuno sa se questo è possibile in Flask?

vi ringrazio in anticipo per il vostro aiuto :-)

risposta

17

Qualcosa del genere dovrebbe iniziare:

from flask import Flask, redirect, request 

app = Flask(__name__) 

redirect_urls = { 
    'http://example.com/old/': 'http://example.com/new/', 
    ... 
} 

def redirect_url(): 
    return redirect(redirect_urls[request.url], 301) 

for url in redirect_urls: 
    app.add_url_rule(url, url, redirect_url) 
4

Un altro modo si può fare questo è quello di cambiare il gestore per il vecchio URL semplicemente reindirizzare esplicitamente.

from flask import Flask, redirect, url_for 

app = Flask(__name__) 

@app.route('/new') 
def new_hotness(): 
    return 'Sizzle!' 

@app.route('/old') 
def old_busted(): 
    return redirect(url_for('new_hotness')) 

Se si dispone già di un gestore per il vecchio URL, allora si potrebbe trovare la cosa più facile da fare è quanto sopra, vale a dire solo sostituendo il corpo con:

return redirect(url_for('new_hotness')) 

risposta di Radomir può essere preferibile soprattutto se hai molti vecchi mapping di URL nuovi, comunque.

+0

Nota: se si sta reindirizzando verso un ancoraggio, non è possibile aggiungerlo a 'new_hotness'. Devi usare un altro parametro chiamato '_anchor' per specificarlo. https://stackoverflow.com/questions/21583594/flask-redirect-url-with-anchor – phyatt