Solución:
Puede probar la vista basada en clases llamada RedirectView
from django.views.generic.base import RedirectView
urlpatterns = patterns('',
url(r'^$', 'macmonster.views.home'),
#url(r'^macmon_home$', 'macmonster.views.home'),
url(r'^macmon_output/$', 'macmonster.views.output'),
url(r'^macmon_about/$', 'macmonster.views.about'),
url(r'^.*$', RedirectView.as_view(url="<url_to_home_view>", permanent=False), name="index")
)
Note como como url
en el <url_to_home_view>
realmente necesita especificar la URL.
permanent=False
devolverá HTTP 302, mientras que permanent=True
devolverá HTTP 301.
Alternativamente, puede usar django.shortcuts.redirect
Actualización para las versiones de Django 2+
Con Django 2+, url()
está en desuso y reemplazado por re_path()
. El uso es exactamente el mismo que url()
con expresiones regulares. Para reemplazos sin la necesidad de una expresión regular, use path()
.
from django.urls import re_path
re_path(r'^.*$', RedirectView.as_view(url="<url_to_home_view>", permanent=False), name="index")
En Django 1.8, así es como hice el mío.
from django.views.generic.base import RedirectView
url(r'^$', views.comingSoon, name="homepage"),
# whatever urls you might have in here
# make sure the 'catch-all' url is placed last
url(r'^.*$', RedirectView.as_view(pattern_name="homepage", permanent=False))
En lugar de usar url
, puedes usar el pattern_name
, que no es SECO y te asegurará que cambies tu URL, no tienes que cambiar también la redirección.
Si está atascado en django 1.2 como yo y RedirectView no existe, otra forma centrada en la ruta de agregar el mapeo de redireccionamiento es usando:
(r'^match_rules/$', 'django.views.generic.simple.redirect_to', {'url': '/new_url'}),
También puedes redirigir todo en un partido. Esto es útil cuando se cambia la carpeta de una aplicación pero se desea conservar los marcadores:
(r'^match_folder/(?P<path>.*)', 'django.views.generic.simple.redirect_to', {'url': '/new_folder/%(path)s'}),
Esto es preferible a django.shortcuts.redirect si solo está intentando modificar el enrutamiento de su URL y no tiene acceso a .htaccess, etc. (Estoy en Appengine y app.yaml no permite la redirección de URL en ese nivel como un .htaccess).