2010-09-24 9 views
6

Estoy creando un nuevo sitio web para reemplazar uno actual, usando Flask micro-framework (basado en Werkzeug) que usa Python (2.6 en mi caso).Redireccionando una URL vieja a una nueva con Flask micro-framework

La funcionalidad principal y muchas páginas son las mismas. Sin embargo, al usar Flask, muchas de las URL anteriores son diferentes a las anteriores.

Necesito una manera de almacenar de alguna manera cada una de las URL antiguas y la nueva URL, de modo que si un usuario ingresa una URL vieja simplemente se reenvían a la nueva URL y todo funciona bien para ellas.



¿Alguien sabe si esto es posible en Flask?

Gracias de antemano por su ayuda :-)

Respuesta

17

Algo como esto debería empezar:

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

Otra manera de hacerlo es cambiar el controlador para el antiguo URL para simplemente redirigir explícitamente.

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')) 

Si ya tiene un controlador para la antigua URL, entonces es posible encontrar la cosa más fácil de hacer es lo anterior, es decir, sólo la sustitución del cuerpo con:

return redirect(url_for('new_hotness')) 

respuesta de Radomir puede ser preferible especialmente si tienes un montón de nuevas asignaciones de URL, sin embargo.

+0

Nota: si está redireccionando a un delimitador, no puede virarlo a 'new_hotness'. Tienes que usar otro parámetro llamado '_anchor' para especificarlo. https://stackoverflow.com/questions/21583594/flask-redirect-url-with-anchor – phyatt

Cuestiones relacionadas