重定

通过将重定向存储在数据库中并将其视为 Django 模型对象,Django 重定向框架让你能够轻松地管理它们?比如说,你可以通过重定向框架告诉Django,把任何指向 /music/ 的请求重定向?/sections/arts/music/ 。当你需要在站点中移动一些东西时,这项功能就派上用场了——网站开发者应该穷尽一切办法避免出现坏链接

使用重定向框

安装重定向应用程序必须遵循以下步骤:

  • ?'django.contrib.redirects' 添加?INSTALLED_APPS 设置中

  • ?'django.contrib.redirects.middleware.RedirectFallbackMiddleware' 添加?MIDDLEWARE_CLASSES 设置中

  • 运行 manage.py syncdb 命令将所需的表添加到数据库中

manage.py syncdb 在数据库中创建了一?django_redirect 表?这是一个简单的查询表,只有site_id、old_path和new_path三个字段

你可以通过 Django 超级管理界面或?Django 数据?API 来创建重定向?要了解更多信息,请参阅“增加、变更和删除重定向”一节

一旦创建了重定向, RedirectFallbackMiddleware 类将完成所有的工作?每当 Django 应用引发一?404 错误,作为终极手段,该中间件将为所请求?URL 在重定向数据库中进行查找?确切地说,它将使用给定的 old_path 以及 SITE_ID 设置对应的站?ID 查找重定向设置?(查阅前面的“多站点”一节可了解关于 SITE_ID 和多站点框架的更多细节) 然后,它将执行以下两个步骤:

  • 如果找到了匹配项,并?new_path 非空,它将重定向?new_path

  • 如果找到了匹配项,但 new_path 为空,它将发送一?410 (Gone) HTTP 头信息以及一个空(无内容)响应

  • 如果未找到匹配项,该请求将如常处理

该中间件仅为 404 错误激活,而不会为 500 错误或其他任何状态码的响应所激活

注意必须考虑 MIDDLEWARE_CLASSES 的顺序?通常,你可以?RedirectFallbackMiddleware 放置在列表的最后,因为它是一种终极手段

注意

如果同时使用重定向和简单页面回退中间件, 必须考虑先检查其中的哪一个(重定向或简单页面)?我们建议将简单页面放在重定向之前(因此将简单页面中间件放置在重定向中间件之前),但你可能有不同想法

增加、变更和删除重定

你可以两种方式增加、变更和删除重定向:

通过管理界面

如果已经激活了全自动的 Django 超级管理界面,你应该能够在超级管理首页看到重定向区域?可以像编辑系统中其它对象一样编辑重定向

同过Python API

重定向表现为django/contrib/redirects/models.py 中的一个标?Django 模型。因此,你可以通过Django数据库API来存取重定向对象,例如:

  1. >>> from django.contrib.redirects.models import Redirect
  2. >>> from django.contrib.sites.models import Site
  3. >>> red = Redirect.objects.create(
  4. ... site=Site.objects.get(id=1),
  5. ... old_path='/music/',
  6. ... new_path='/sections/arts/music/',
  7. ... )
  8. >>> Redirect.objects.get(old_path='/music/')
  9. <Redirect: /music/ ---> /sections/arts/music/>