El framework redirects de Django te permite administrar las redirecciones con
facilidad almacenándolos en una base de datos y tratándolos como cualquier otro
objeto modelo de Django. Por ejemplo puedes usar el framework redirects para
indicarle a Django "Redirecciona cualquier petición de /music/
a
/sections/arts/music/
.". Esto es útil cuando necesitas cambiar las cosas de
lugar en tu sitio; los desarrolladores Web deberían hacer lo que esté en sus
manos para evitar los enlaces rotos.
14.4.1. Usar el framework redirects
Para instalar la aplicación redirects, sigue estos pasos:
- Agrega
'django.contrib.redirects'
a tuINSTALLED_APPS
. - Agrega
'django.contrib.redirects.middleware.RedirectFallbackMiddleware'
a tu variable de configuraciónMIDDLEWARE_CLASSES
. - Ejecuta el comando
manage.py syncdb
para instalar la única tabla necesaria a tu base de datos.
manage.py syncdb
crea una tabla django_redirect
en tu base de datos.
Esta se trata sencillamente de una tabla de búsqueda con campos site_id
,
old_path
y new_path
.
Puedes crear redirecciones tanto a través de la interfaz de administración como a través de la API de base de datos de Django. Para más información puedes leer la sección "Agregando, modificando y eliminando redirecciones".
Una vez que has creado redirecciones, la clase RedirectFallbackMiddleware
se
encarga de todo el trabajo. Cada vez que cualquier aplicación Django lanza un
error 404, este middleware verifica como último recurso la base de datos de
redirects en búsqueda de la URL que se ha requerido. Específicamente busca un
redirect con el old_path
provisto y con un identificador de sitio que
coincida con la variable de configuración SITE_ID
. (para más información
acerca de SITE_ID
y el framework sites, consulta la sección "Sites"). Luego
entonces realiza los siguientes pasos:
- Si encuentra una coincidencia y
new_path
no está vacío, redirecciona la petición anew_path
. - Si encuentra una coincidencia y
new_path
está vació, envía una cabecera HTTP 410 ("Ausente") y una respuesta vacía (sin contenido). - Si no encuentra una coincidencia, el procesamiento de la petición continúa normalmente.
El middleware sólo se activa ante errores 404 — no en errores 500 o respuestas con otros códigos de estado.
Notar que el orden de MIDDLEWARE_CLASSES
es relevante. Generalmente puedes
colocar RedirectFallbackMiddleware
cerca del final de la lista, debido a que
se trata de una opción de último recurso.
Nota Si usas los middlewares redirect y flatpages, analiza cual de los dos (redirect o flatpages) desearías sea ejecutado primero. Sugerimos configurar flatpages antes que redirects (o sea colocar el middleware flatpages antes que el middleware redirects) pero tu podrías decidir lo contrario.
14.4.2. Agregar, modificar y eliminar redirecciones
Puedes agregar, modificar y eliminar redirecciones de dos maneras:
14.4.2.1. Vía la interfaz de administración
Si has activado la interfaz automática de administración de Django, deberías ver una sección "Redirects" en la página de índice de la aplicación admin. Edita las redirecciones como lo harías con cualquier otro objeto en el sistema.
14.4.2.2. Vía la API Python
Las redirecciones se representan mediante un modelo estándar Django que reside
en django/contrib/redirects/models.py
. Por lo tanto puedes acceder a los
objetos redirect vía la API de base de datos de Django, por ejemplo:
>>> from django.contrib.redirects.models import Redirect
>>> from django.contrib.sites.models import Site
>>> red = Redirect(
... site=Site.objects.get(id=1),
... old_path='/music/',
... new_path='/sections/arts/music/',
... )
>>> red.save()
>>> Redirect.objects.get(old_path='/music/')
<Redirect: /music/ ---> /sections/arts/music/>