posts - 431,  comments - 344,  trackbacks - 0

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

使用重定向框架

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

1.    将 'django.contrib.redirects'添加到 INSTALLED_APPS设置中。

2.    将 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'添加到 MIDDLEWARE_CLASSES设置中。

3.    运行 manage.pysyncdb命令将所需的表安装到数据库中。

manage.pysyncdb在数据库中创建了一个 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(

...     site=Site.objects.get(id=1),

...     old_path='/music/',

...     new_path='/sections/arts/music/',

... )

>>> red.save()

>>> Redirect.objects.get(old_path='/music/')

<Redirect: /music/ ---> /sections/arts/music/>

posted on 2008-12-05 15:43 周锐 阅读(455) 评论(0)  编辑  收藏 所属分类: Python

只有注册用户登录后才能发表评论。


网站导航: