Django - Pengalihan Halaman

Pengalihan halaman diperlukan karena berbagai alasan dalam aplikasi web. Anda mungkin ingin mengarahkan pengguna ke halaman lain saat tindakan tertentu terjadi, atau pada dasarnya jika terjadi error. Misalnya, saat pengguna masuk ke situs web Anda, dia sering dialihkan ke beranda utama atau ke dasbor pribadinya. Di Django, pengalihan diselesaikan dengan menggunakan metode 'pengalihan'.

Metode 'redirect' mengambil sebagai argumen: URL yang ingin Anda alihkan sebagai nama tampilan string A.

Sejauh ini myapp / views terlihat seperti ini -

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)

Mari kita ubah tampilan hello untuk mengalihkan ke djangoproject.com dan viewArticle kita untuk mengalihkan ke '/ myapp / artikel' internal kita. Untuk melakukannya, myapp / view.py akan berubah menjadi -

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)

Dalam contoh di atas, pertama kita mengimpor redirect dari django.shortcuts dan untuk pengalihan ke situs resmi Django kita hanya meneruskan URL lengkap ke metode 'redirect' sebagai string, dan untuk contoh kedua (tampilan viewArticle) 'redirect' metode mengambil nama tampilan dan parameternya sebagai argumen.

Mengakses / myapp / hello, akan memberi Anda layar berikut -

Dan mengakses / myapp / article / 42, akan memberi Anda layar berikut -

Dimungkinkan juga untuk menentukan apakah 'redirect' bersifat sementara atau permanen dengan menambahkan parameter permanen = True. Pengguna tidak akan melihat perbedaan, tetapi ini adalah detail yang diperhitungkan mesin pencari saat menentukan peringkat situs web Anda.

Ingat juga bahwa parameter 'name' yang kami tentukan di url.py kami saat memetakan URL -

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

Nama itu (di sini artikel) dapat digunakan sebagai argumen untuk metode 'redirect', maka pengalihan viewArticle kami dapat diubah dari -

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- Ada juga fungsi untuk menghasilkan URL; ini digunakan dengan cara yang sama seperti pengalihan; metode 'mundur' (django.core.urlresolvers.reverse). Fungsi ini tidak mengembalikan objek HttpResponseRedirect, tetapi hanya string yang berisi URL ke tampilan yang dikompilasi dengan argumen yang diteruskan.