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, redirectfrom django.http import HttpResponseimport 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,会给你以下屏幕 :
并访问/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")
到 :
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的字符串.