Django - Redirecionamento de Página

O redirecionamento de página é necessário por vários motivos em aplicativos da web. Você pode querer redirecionar um usuário para outra página quando ocorrer uma ação específica ou basicamente em caso de erro. Por exemplo, quando um usuário efetua login em seu site, ele geralmente é redirecionado para a página inicial principal ou para seu painel pessoal. No Django, o redirecionamento é realizado usando o método 'redirect'.

O método 'redirect' leva como argumento: O URL para o qual você deseja ser redirecionado como string O nome de uma visualização.

O myapp / views se parece com o seguinte até agora -

def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
	
def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return HttpResponse(text)
	
def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

Vamos alterar a visualização hello para redirecionar para djangoproject.com e nosso viewArticle para redirecionar para nosso '/ myapp / articles' interno. Para fazer isso, o myapp / view.py mudará para -

from django.shortcuts import render, redirect
from django.http import HttpResponse
import datetime

# Create your views here.
def hello(request):
   today = datetime.datetime.now().date()
   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return redirect("https://www.djangoproject.com")
	
def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")
	
def viewArticles(request, year, month):
   text = "Displaying articles of : %s/%s"%(year, month)
   return HttpResponse(text)

No exemplo acima, primeiro importamos o redirecionamento de django.shortcuts e para o redirecionamento ao site oficial do Django, apenas passamos a URL completa para o método 'redirect' como string, e para o segundo exemplo (a visualização viewArticle), o 'redirect' método leva o nome da visão e seus parâmetros como argumentos.

Acessando / myapp / hello, você verá a seguinte tela -

E ao acessar / myapp / article / 42, você verá a seguinte tela -

Também é possível especificar se o 'redirecionamento' é temporário ou permanente adicionando o parâmetro permanent = True. O usuário não verá diferença, mas esses são detalhes que os motores de busca levam em consideração ao classificar o seu site.

Lembre-se também do parâmetro 'name' que definimos em nosso url.py ao mapear os URLs -

url(r'^articles/(?P\d{2})/(?P\d{4})/', 'viewArticles', name = 'articles'),

Esse nome (aqui artigo) pode ser usado como argumento para o método 'redirect', então nosso redirecionamento viewArticle pode ser alterado de -

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(viewArticles, year = "2045", month = "02")

To -

def viewArticle(request, articleId):
   """ A view that display an article based on his ID"""
   text = "Displaying article Number : %s" %articleId
   return redirect(articles, year = "2045", month = "02")

Note- Também existe uma função para gerar URLs; é usado da mesma forma que redirecionar; o método 'reverso' (django.core.urlresolvers.reverse). Esta função não retorna um objeto HttpResponseRedirect, mas simplesmente uma string contendo a URL para a visualização compilada com qualquer argumento passado.