Django - การเปลี่ยนเส้นทางหน้า

จำเป็นต้องมีการเปลี่ยนเส้นทางหน้าด้วยเหตุผลหลายประการในโปรแกรมประยุกต์บนเว็บ คุณอาจต้องการเปลี่ยนเส้นทางผู้ใช้ไปยังเพจอื่นเมื่อมีการดำเนินการบางอย่างเกิดขึ้นหรือโดยพื้นฐานแล้วเกิดข้อผิดพลาด ตัวอย่างเช่นเมื่อผู้ใช้เข้าสู่เว็บไซต์ของคุณเขามักจะถูกเปลี่ยนเส้นทางไปยังหน้าแรกหลักหรือไปที่แดชบอร์ดส่วนตัวของเขา ใน Django การเปลี่ยนเส้นทางทำได้โดยใช้วิธีการ 'เปลี่ยนเส้นทาง'

เมธอด 'เปลี่ยนเส้นทาง' ใช้เป็นอาร์กิวเมนต์: URL ที่คุณต้องการเปลี่ยนเส้นทางไปเป็นชื่อมุมมองสตริง A

myapp / views มีลักษณะดังต่อไปนี้ -

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)

ลองเปลี่ยนมุมมองสวัสดีเป็นเปลี่ยนเส้นทางไปที่ djangoproject.com และ viewArticle ของเราเพื่อเปลี่ยนเส้นทางไปยัง '/ myapp / article' ภายในของเรา ในการทำเช่นนั้น myapp / view.py จะเปลี่ยนเป็น -

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)

ในตัวอย่างข้างต้นอันดับแรกเรานำเข้าการเปลี่ยนเส้นทางจาก django.shortcuts และสำหรับการเปลี่ยนเส้นทางไปยังเว็บไซต์ทางการของ Django เราเพียงแค่ส่ง URL แบบเต็มไปยังเมธอด 'เปลี่ยนเส้นทาง' เป็นสตริงและสำหรับตัวอย่างที่สอง (มุมมอง viewArticle) 'เปลี่ยนเส้นทาง' วิธีใช้ชื่อมุมมองและพารามิเตอร์ของเขาเป็นอาร์กิวเมนต์

การเข้าถึง / myapp / สวัสดีจะแสดงหน้าจอต่อไปนี้ -

และเข้าถึง / myapp / article / 42 จะแสดงหน้าจอต่อไปนี้ -

นอกจากนี้ยังสามารถระบุได้ว่า 'การเปลี่ยนเส้นทาง' เป็นแบบชั่วคราวหรือถาวรโดยการเพิ่มพารามิเตอร์ถาวร = True ผู้ใช้จะไม่เห็นความแตกต่าง แต่เป็นรายละเอียดที่เครื่องมือค้นหานำมาพิจารณาเมื่อจัดอันดับเว็บไซต์ของคุณ

โปรดจำไว้ว่าพารามิเตอร์ 'ชื่อ' ที่เรากำหนดไว้ใน url.py ของเราในขณะที่แมป URL -

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

ชื่อนั้น (ที่นี่บทความ) สามารถใช้เป็นอาร์กิวเมนต์สำหรับวิธีการ 'เปลี่ยนเส้นทาง' จากนั้นการเปลี่ยนเส้นทาง viewArticle ของเราสามารถเปลี่ยนได้จาก -

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- นอกจากนี้ยังมีฟังก์ชั่นในการสร้าง URL ใช้ในลักษณะเดียวกับการเปลี่ยนเส้นทาง วิธี 'ย้อนกลับ' (django.core.urlresolvers.reverse) ฟังก์ชันนี้ไม่ส่งคืนอ็อบเจ็กต์ HttpResponseRedirect แต่เป็นเพียงสตริงที่มี URL ไปยังมุมมองที่คอมไพล์ด้วยอาร์กิวเมนต์ที่ส่งผ่านใด ๆ