Django - Redirection de page

La redirection de page est nécessaire pour de nombreuses raisons dans les applications Web. Vous souhaiterez peut-être rediriger un utilisateur vers une autre page lorsqu'une action spécifique se produit, ou fondamentalement en cas d'erreur. Par exemple, lorsqu'un utilisateur se connecte à votre site Web, il est souvent redirigé vers la page d'accueil principale ou vers son tableau de bord personnel. Dans Django, la redirection est effectuée en utilisant la méthode 'redirect'.

La méthode 'redirect' prend comme argument: L'URL vers laquelle vous souhaitez être redirigé sous forme de chaîne Le nom d'une vue.

La myapp / views ressemble à ce qui suit jusqu'à présent -

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)

Modifions la vue Hello pour rediriger vers djangoproject.com et notre viewArticle pour rediriger vers nos '/ myapp / articles' internes. Pour ce faire, myapp / view.py deviendra -

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)

Dans l'exemple ci-dessus, nous avons d'abord importé la redirection depuis django.shortcuts et pour la redirection vers le site officiel de Django, nous avons simplement passé l'URL complète à la méthode 'redirect' sous forme de chaîne, et pour le deuxième exemple (la vue viewArticle) la 'redirection' La méthode prend le nom de la vue et ses paramètres comme arguments.

Accéder à / myapp / hello, vous donnera l'écran suivant -

Et accéder à / myapp / article / 42, vous donnera l'écran suivant -

Il est également possible de spécifier si la 'redirection' est temporaire ou permanente en ajoutant le paramètre permanent = True. L'utilisateur ne verra aucune différence, mais ce sont des détails que les moteurs de recherche prennent en compte lors du classement de votre site Web.

Rappelez-vous également que le paramètre 'name' que nous avons défini dans notre url.py lors du mappage des URL -

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

Ce nom (ici l'article) peut être utilisé comme argument pour la méthode 'redirect', alors notre redirection viewArticle peut être modifiée 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- Il existe également une fonction pour générer des URL; il est utilisé de la même manière que la redirection; la méthode 'reverse' (django.core.urlresolvers.reverse). Cette fonction ne renvoie pas un objet HttpResponseRedirect, mais simplement une chaîne contenant l'URL de la vue compilée avec tout argument passé.