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://django.ac.cn")
	
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 的字符串。

广告