Django - Reindirizzamento della pagina

Il reindirizzamento della pagina è necessario per molti motivi nell'applicazione web. Potresti voler reindirizzare un utente a un'altra pagina quando si verifica un'azione specifica o fondamentalmente in caso di errore. Ad esempio, quando un utente accede al tuo sito web, viene spesso reindirizzato alla home page principale o alla sua dashboard personale. In Django, il reindirizzamento viene eseguito utilizzando il metodo "redirect".

Il metodo "redirect" prende come argomento: L'URL a cui vuoi essere reindirizzato come stringa Il nome di una vista.

Finora myapp / views assomiglia al seguente:

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)

Cambiamo la visualizzazione hello per reindirizzare a djangoproject.com e il nostro viewArticle per reindirizzare al nostro interno "/ miaapp / articoli". Per fare ciò, myapp / view.py cambierà in -

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)

Nell'esempio sopra, prima abbiamo importato il reindirizzamento da django.shortcuts e per il reindirizzamento al sito web ufficiale di Django passiamo semplicemente l'URL completo al metodo 'redirect' come stringa, e per il secondo esempio (la vista viewArticle) il 'redirect' il metodo accetta il nome della vista ei suoi parametri come argomenti.

L'accesso a / miaapp / ciao, ti darà la seguente schermata:

E l'accesso a / miaapp / articolo / 42, ti darà la seguente schermata:

È anche possibile specificare se il 'redirect' è temporaneo o permanente aggiungendo il parametro permanent = True. L'utente non vedrà alcuna differenza, ma questi sono dettagli che i motori di ricerca prendono in considerazione quando posizionano il tuo sito web.

Ricorda anche quel parametro 'nome' che abbiamo definito nel nostro url.py durante la mappatura degli URL -

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

Quel nome (qui articolo) può essere utilizzato come argomento per il metodo 'redirect', quindi il nostro reindirizzamento viewArticle può essere modificato da -

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- C'è anche una funzione per generare URL; viene utilizzato allo stesso modo del reindirizzamento; il metodo "reverse" (django.core.urlresolvers.reverse). Questa funzione non restituisce un oggetto HttpResponseRedirect, ma semplicemente una stringa contenente l'URL della vista compilata con qualsiasi argomento passato.