Django - Redirección de página

La redirección de página es necesaria por muchas razones en la aplicación web. Es posible que desee redirigir a un usuario a otra página cuando se produce una acción específica o, básicamente, en caso de error. Por ejemplo, cuando un usuario inicia sesión en su sitio web, a menudo es redirigido a la página de inicio principal oa su panel de control personal. En Django, la redirección se logra mediante el método 'redireccionar'.

El método de 'redirección' toma como argumento: La URL a la que desea ser redirigido como cadena El nombre de una vista.

La myapp / views se parece a la siguiente hasta ahora:

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)

Cambiemos la vista de saludo para redirigir a djangoproject.com y nuestro viewArticle para redirigir a nuestro '/ myapp / articles' interno. Para hacerlo, myapp / view.py cambiará a -

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)

En el ejemplo anterior, primero importamos la redirección de django.shortcuts y para la redirección al sitio web oficial de Django simplemente pasamos la URL completa al método 'redirect' como cadena, y para el segundo ejemplo (la vista viewArticle) la 'redirección' El método toma el nombre de la vista y sus parámetros como argumentos.

Accediendo a / myapp / hello, te dará la siguiente pantalla -

Y accediendo a / myapp / article / 42, te dará la siguiente pantalla -

También es posible especificar si la 'redirección' es temporal o permanente agregando el parámetro permanente = Verdadero. El usuario no verá ninguna diferencia, pero estos son detalles que los motores de búsqueda toman en cuenta al posicionar su sitio web.

También recuerde ese parámetro de 'nombre' que definimos en nuestro url.py al mapear las URL:

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

Ese nombre (aquí artículo) se puede usar como argumento para el método de 'redirección', luego nuestra redirección viewArticle se puede cambiar 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- También hay una función para generar URL; se utiliza de la misma forma que la redirección; el método 'inverso' (django.core.urlresolvers.reverse). Esta función no devuelve un objeto HttpResponseRedirect, sino simplemente una cadena que contiene la URL de la vista compilada con cualquier argumento pasado.