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 周銳 閱讀(463) 評論(0)  編輯  收藏 所屬分類: Python
          主站蜘蛛池模板: 伊吾县| 顺昌县| 竹北市| 肇源县| 梁河县| 肥城市| 墨玉县| 凤台县| 灵武市| 砀山县| 镇远县| 富川| 金湖县| 无为县| 天台县| 阿拉善盟| 惠东县| 名山县| 东莞市| 闸北区| 交城县| 小金县| 武陟县| 泽州县| 旬邑县| 东乡县| 莱州市| 西贡区| 德化县| 湘西| 武宁县| 融水| 分宜县| 花垣县| 高碑店市| 苍南县| 峡江县| 贵溪市| 定南县| 连城县| 上栗县|