Django - 页面重定向

  • 简述

    Web 应用程序中需要页面重定向的原因有很多。当发生特定操作时,或者基本上是在出错的情况下,您可能希望将用户重定向到另一个页面。例如,当用户登录到您的网站时,他通常会被重定向到主页或个人仪表板。在 Django 中,重定向是使用 'redirect' 方法完成的。
    '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'方法将视图名称和他的参数作为参数。
    访问 /myapp/hello,会给你以下屏幕 -
    Django页面重定向示例1
    并访问 /myapp/article/42,将为您提供以下屏幕 -
    Django页面重定向示例2
    还可以通过添加 Permanent = True 参数来指定“重定向”是临时的还是永久的。用户不会看到任何差异,但这些是搜索引擎在对您的网站进行排名时考虑的细节。
    还要记住我们在映射 URL 时在 url.py 中定义的“名称”参数 -
    
    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 的功能;它的使用方式与重定向相同;'reverse' 方法(django.core.urlresolvers.reverse)。此函数不返回 HttpResponseRedirect 对象,而只是一个字符串,其中包含使用任何传递的参数编译的视图的 URL。