- Django 教程
- 姜戈 - 主页
- Django - 基础知识
- Django - 概述
- Django - 环境
- Django - 创建项目
- Django - 应用程序生命周期
- Django - 管理界面
- Django - 创建视图
- Django - URL 映射
- Django - 模板系统
- Django - 模型
- Django - 页面重定向
- Django - 发送电子邮件
- Django - 通用视图
- Django - 表单处理
- Django - 文件上传
- Django - Apache 设置
- Django - Cookie 处理
- Django - 会话
- Django - 缓存
- Django - 评论
- 姜戈 - RSS
- Django - AJAX
- Django 有用资源
- Django - 快速指南
- Django - 有用的资源
- Django - 讨论
Django - 页面重定向
Web 应用程序中出于多种原因需要页面重定向。当发生特定操作时,或者基本上是在发生错误时,您可能希望将用户重定向到另一个页面。例如,当用户登录您的网站时,他通常会被重定向到主页或个人仪表板。在 Django 中,重定向是使用“redirect”方法完成的。
“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,将显示以下屏幕 -
访问 /myapp/article/42,将显示以下屏幕 -
还可以通过添加 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。