- Django 基本概念
- Django - 首页
- Django - 基础
- Django - 概述
- Django - 环境搭建
- Django - 创建项目
- Django - 应用生命周期
- Django - 创建视图
- Django - URL 映射
- Django - 首页
- Django - 模板系统
- Django - MVT
- Django - 添加主模板
- Django Admin
- Django Admin - 接口
- Django Admin - 创建用户
- Django Admin - 包含模型
- Django Admin - 设置显示字段
- Django Admin - 更新对象
- Django 模型
- Django - 模型
- Django - 插入数据
- Django - 更新数据
- Django - 删除数据
- Django - 更新模型
- Django 静态文件
- Django - 添加静态文件
- Django - 添加 CSS 文件
- Django 高级
- Django - 404 页面未找到
- Django - 页面重定向
- Django - 发送邮件
- Django - 通用视图
- Django - 表单处理
- Django - 文件上传
- Django - Apache 配置
- Django - Cookie 处理
- Django - Session
- Django - 缓存
- Django - 评论
- Django - RSS
- Django - AJAX
- Django 资源推荐
- Django - 快速指南
- Django - 资源推荐
- Django - 讨论
Django - 页面重定向
网页应用中出于多种原因需要页面重定向。当发生特定操作时,或者在出现错误的情况下,您可能需要将用户重定向到另一个页面。例如,当用户登录您的网站时,通常会将其重定向到主页或其个人仪表盘。在 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://django.ac.cn") 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 导入 redirect,对于重定向到 Django 官方网站,我们只需将完整的 URL 作为字符串传递给 `redirect` 方法;对于第二个例子(viewArticle 视图),`redirect` 方法将视图名称及其参数作为参数。
访问 /myapp/hello,将显示以下屏幕:
访问 /myapp/article/42,将显示以下屏幕:
还可以通过添加 `permanent = True` 参数来指定重定向是临时的还是永久的。用户不会看到任何区别,但这对于搜索引擎在对您的网站进行排名时会考虑到的细节。
还要记住我们在 url.py 中映射 URL 时定义的 `name` 参数:
url(r'^articles/(?P\d{2})/(?P\d{4})/', 'viewArticles', name = 'articles'),
该名称(此处为 article)可用作 `redirect` 方法的参数,然后我们的 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;它的使用方法与 redirect 相同;`reverse` 方法(django.core.urlresolvers.reverse)。此函数不返回 HttpResponseRedirect 对象,而只是返回一个包含已编译视图和任何传递参数的 URL 的字符串。