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.