Django - 页面重定向

Web应用程序中出于多种原因需要页面重定向.您可能希望在发生特定操作时将用户重定向到另一个页面,或者基本上是出现错误.例如,当用户登录您的网站时,他经常被重定向到主要主页或他的个人仪表板.在Django中,重定向是使用'重定向'方法完成的.

'redirect'方法作为参数:您希望重定向到的字符串作为字符串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)

让我们更改hello视图以重定向到djangoproj ect.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导入重定向,并且为了重定向到Django官方网站,我们只需将完整的URL传递给'redirect'方法为字符串,对于第二个示例(viewArticle视图),'redirect'方法将视图名称及其参数作为参数.

访问/myapp/hello,会给你以下屏幕 :

Django页面重定向示例1

并访问/myapp/article/42,会给你以下屏幕 :

Django页面重定向示例2

通过添加permanent = True参数,还可以指定"重定向"是临时的还是永久的.用户将看不到任何差异,但这些是搜索引擎在您的网站排名时考虑的细节.

还要记住我们在映射时在url.py中定义的'name'参数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")

:

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的功能;它的使用方式与重定向相同; '反向'方法(django.core.urlresolvers.reverse).此函数不返回HttpResponseRedirect对象,而只返回包含使用任何传递参数编译的视图的URL的字符串.