📜  Django-页面重定向

📅  最后修改于: 2020-10-25 10:01:15             🧑  作者: Mango


由于Web应用程序中的许多原因,需要页面重定向。您可能希望在发生特定操作时或基本上在发生错误的情况下将用户重定向到另一个页面。例如,当用户登录到您的网站时,通常会将他重定向到主页或个人仪表板。在Django中,重定向是使用“重定向”方法完成的。

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

访问/ myapp / hello,将显示以下屏幕-

Django页面重定向示例1

并访问/ myapp / article / 42,将显示以下屏幕:

Django页面重定向Example2

通过添加permanent = True参数,还可以指定“重定向”是临时的还是永久的。用户不会看到任何区别,但这是搜索引擎在对您的网站进行排名时所考虑的详细信息。

还记得在映射URL时我们在url.py中定义的’name’参数-

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。