页面重定向(Page Redirection)
Web应用程序中出于多种原因需要页面重定向。 您可能希望在发生特定操作时将用户重定向到另一个页面,或者基本上是出现错误。 例如,当用户登录您的网站时,他经常被重定向到主要主页或他的个人仪表板。 在Django中,使用“重定向”方法完成重定向。
'redirect'方法作为参数:您要重定向到的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)
让我们更改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导入重定向,并且为了重定向到Django官方网站,我们只是将完整的URL作为字符串传递给'redirect'方法,对于第二个例子(viewArticle视图),'redirect' method将视图名称及其参数作为参数。
访问/ myapp/hello,将为您提供以下屏幕 -
并访问/ myapp/article/42,将为您提供以下屏幕 -
通过添加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")
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的字符串。