重定
通过将重定向存储在数据库中并将其视为 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来存取重定向对象,例如:
>>> from django.contrib.redirects.models import Redirect
>>> from django.contrib.sites.models import Site
>>> red = Redirect.objects.create(
... site=Site.objects.get(id=1),
... old_path='/music/',
... new_path='/sections/arts/music/',
... )
>>> Redirect.objects.get(old_path='/music/')
<Redirect: /music/ ---> /sections/arts/music/>