• 重定
    • 使用重定向框
    • 增加、变更和删除重定
      • 通过管理界面
      • 同过Python API

    重定

    通过将重定向存储在数据库中并将其视为 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/>