Django - 頁面重定向



網頁應用中出於多種原因需要頁面重定向。當發生特定操作時,或者在出現錯誤的情況下,您可能需要將使用者重定向到另一個頁面。例如,當用戶登入您的網站時,通常會將其重定向到主頁或其個人儀表盤。在 Django 中,重定向是使用 `redirect` 方法完成的。

`redirect` 方法的引數:要重定向到的 URL(字串) 檢視名稱。

到目前為止,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)

讓我們更改 hello 檢視以重定向到 djangoproject.com,並將我們的 viewArticle 重定向到內部的 '/myapp/articles'。為此,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 匯入 redirect,對於重定向到 Django 官方網站,我們只需將完整的 URL 作為字串傳遞給 `redirect` 方法;對於第二個例子(viewArticle 檢視),`redirect` 方法將檢視名稱及其引數作為引數。

訪問 /myapp/hello,將顯示以下螢幕:

Django page Redirection Example1

訪問 /myapp/article/42,將顯示以下螢幕:

Django page Redirection Example2

還可以透過新增 `permanent = True` 引數來指定重定向是臨時的還是永久的。使用者不會看到任何區別,但這對於搜尋引擎在對您的網站進行排名時會考慮到的細節。

還要記住我們在 url.py 中對映 URL 時定義的 `name` 引數:

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

該名稱(此處為 article)可用作 `redirect` 方法的引數,然後我們的 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")

更改為

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")

注意:還有一個函式可以生成 URL;它的使用方法與 redirect 相同;`reverse` 方法(django.core.urlresolvers.reverse)。此函式不返回 HttpResponseRedirect 物件,而只是返回一個包含已編譯檢視和任何傳遞引數的 URL 的字串。

廣告