Como realizo um redirecionamento simples (por exemplo, cflocation
no ColdFusion ou header(location:http://)
PHP) no Django?
158
É simples:
from django.http import HttpResponseRedirect
def myview(request):
...
return HttpResponseRedirect("/path/")
Mais informações nos documentos oficiais do Django
Atualização: Django 1.0
Aparentemente, existe uma maneira melhor de fazer isso no Django agora usando generic views
.
Exemplo -
from django.views.generic.simple import redirect_to
urlpatterns = patterns('',
(r'^one/$', redirect_to, {'url': '/another/'}),
#etc...
)
Há mais na documentação das visualizações genéricas . Crédito - Carles Barrobés .
Atualização # 2: Django 1.3 ou superior
No Django 1.5, o redirect_to não existe mais e foi substituído pelo RedirectView . Crédito para Yonatan
from django.views.generic import RedirectView
urlpatterns = patterns('',
(r'^one/$', RedirectView.as_view(url='/another/')),
)
redirect
dedjango.shortcuts
?('^pattern/$', lambda x: redirect('/redirect/url/'))
Dependendo do que você deseja (ou seja, se você não deseja fazer nenhum pré-processamento adicional), é mais simples usar a
redirect_to
visão genérica do Django :Consulte a documentação para obter exemplos mais avançados.
Para o Django 1.3 ou superior, use:
fonte
Na verdade, existe uma maneira mais simples do que ter uma visualização para cada redirecionamento - você pode fazer isso diretamente em
urls.py
:Um destino pode ser chamado e também uma string , que é o que estou usando aqui.
fonte
redirect_to
visão genérica que acompanha o django é mais simples ainda e mais legível. Veja a resposta de Carles stackoverflow.com/questions/523356/python-django-page-redirect/…Desde o Django 1.1, você também pode usar o atalho de redirecionamento mais simples :
Também é necessário um argumento opcional opcional = True keyword.
fonte
Se você deseja redirecionar uma subpasta inteira, o
url
argumento no RedirectView é realmente interpolado , para que você possa fazer algo assim emurls.py
:A
?P<path>
captura que você capturar será inseridaRedirectView
. Essa variável capturada será substituída nourl
argumento que você forneceu, indicando/new_path/yay/mypath
se o caminho original era/old/yay/mypath
.Você também pode fazer isso
….as_view(url='…', query_string=True)
se desejar copiar a sequência de consultas também.fonte
Com o Django versão 1.3, a abordagem baseada em classe é:
Este exemplo reside em urls.py
fonte
Cuidado. Eu fiz isso em um servidor de desenvolvimento e queria alterá-lo mais tarde.
Eu tive que limpar meus caches para alterá-lo. Para evitar esse risco de cabeça no futuro, consegui torná-lo temporário da seguinte forma:
fonte
Você pode fazer isso na seção Admin. É explicado na documentação.
https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
fonte
page_path = define em urls.py
fonte
Isso deve funcionar na maioria das versões do django, estou usando-o na 1.6.5:
Você ainda pode usar o nome do padrão de URL em vez de um URL codificado com esta solução. O parâmetro location_id do URL é passado para a função lambda.
fonte