python - with - Redireccionamiento de URL de Django
django redirect url (4)
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 la url
, puedes usar el pattern_name
, que es un poco pattern_name
, y te asegurará que cambies tu url, no tienes que cambiar la redirección también.
¿Cómo puedo redireccionar el tráfico que no coincide con ninguna de mis otras URL a la página de inicio? Mi urls.py parece,
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''^.*$'', ''macmonster.views.home''),
)
Tal como está, la última entrada envía todo el "otro" tráfico a la página de inicio, pero quiero redireccionar a través de un HTTP 301 o 302.
Gracias,
Otra forma de hacerlo es usar HttpResponsePermanentRedirect de la siguiente manera:
En view.py
def url_redirect(request):
return HttpResponsePermanentRedirect("/new_url/")
En url.py
url(r''^old_url/$'', "website.views.url_redirect", name="url-redirect"),
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'')
)
Observe cómo, como url
en <url_to_home_view>
necesita especificar realmente la url.
permanent=False
devolverá HTTP 302, mientras que permanent=True
devolverá HTTP 301.
Alternativamente, puede usar django.shortcuts.redirect
Si estás atascado en django 1.2 como yo y RedirectView no existe, otra forma centrada en la ruta para agregar la asignación de redirección es usar:
(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 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 su enrutamiento url y no tiene acceso a .htaccess, etc. (Estoy en Appengine y app.yaml no permite la redirección de URL a ese nivel como un .htaccess).