posts - 431,  comments - 344,  trackbacks - 0
          公告
           Don't Repeat Yourself
          座右銘:you can lose your money, you can spent all of it, and if you work hard you get it all back. But if you waste your time, you're never gonna get it back.
          公告本博客在此聲明部分文章為轉摘,只做資料收集使用。


          微信: szhourui
          QQ:109450684
          Email
          lsi.zhourui@gmail.com
          <2008年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          留言簿(15)

          隨筆分類(1019)

          文章分類(3)

          文章檔案(21)

          收藏夾

          Link

          好友博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 861069
          • 排名 - 44

          最新評論

          閱讀排行榜

          Django因此提供對全局 context處理器的支持。TEMPLATE_CONTEXT_PROCESSORS指定了總是使用哪些contextprocessors。這樣就省去了每次使用RequestContext都指定processors的麻煩^_^

          默認情況下,TEMPLATE_CONTEXT_PROCESSORS設置如下:

          TEMPLATE_CONTEXT_PROCESSORS = (
              'django.core.context_processors.auth',
              'django.core.context_processors.debug',
              'django.core.context_processors.i18n',
              'django.core.context_processors.media',
          )

          這個設置是一個可調用函數的Tuple,其中的每個函數使用了和上文中我們的custom_proc相同的接口:接收一個request對象作為參數,返回一個包含了將被合并到context中的項的字典。請注意TEMPLATE_CONTEXT_PROCESSORS中的值是以 strings的形式給出的,這意味著這些處理器必須在你的python路徑中的某處(這樣你才能在設置中引用它們)

          每個處理器將會按照順序應用。也就是說如果你在第一個處理器里面向context添加了一個變量,而第二個處理器添加了同樣名字的變量,那么第二個將會覆蓋第一個。

          Django提供了幾個簡單的context處理器,有些在默認情況下被啟用的。

          django.core.context_processors.auth

          如果TEMPLATE_CONTEXT_PROCESSORS包含了這個處理器,那么每個RequestContext將包含這些變量:

          §                                 user:一個django.contrib.auth.models.User實例,描述了當前登錄用戶(或者一個AnonymousUser實例,如果客戶端沒有登錄)。

          §                                 messages:一個當前登錄用戶的消息列表(字符串)。在后臺,對每一個請求這個變量都調用request.user.get_and_delete_messages()方法。這個方法收集用戶的消息然后把它們從數據庫中刪除。

          §                                 permsdjango.core.context_processors.PermWrapper的一個實例,包含了當前登錄用戶有哪些權限。

          關于userspermissionsmessages的更多內容請參考第12章。

          django.core.context_processors.debug

          這個處理器把調試信息發送到模板層。如果TEMPLATE_CONTEXT_PROCESSORS包含了這個處理器,RequestContext將包含這些變量:

          §                                 debug:你設置的DEBUG的值(TrueFalse)。你可以在模板里面用這個變量測試是否處在debug模式下。

          §                                 sql_queries:包含類似于{'sql':...,'time':...}的字典的一個列表,記錄了這個請求期間的每個SQL查詢以及查詢所耗費的時間。這個列表是按照請求順序進行排列的。

          由于調試信息比較敏感,所以這個context處理器只有當同時滿足下面兩個條件的時候才有效:

          §                                 DEBUG參數設置為True

          §                                 請求的ip應該包含在INTERNAL_IPS的設置里面。

          django.core.context_processors.i18n

          如果這個處理器啟用,每個RequestContext將包含下面的變量:

          §                                 LANGUAGESLANGUAGES選項的值。

          §                                 LANGUAGE_CODE:如果request.LANGUAGE_CODE存在,就等于它;否則,等同于LANGUAGE_CODE設置。

          附錄E提供了有關這兩個設置的更多的信息。

          django.core.context_processors.request

          如果啟用這個處理器,每個RequestContext將包含變量request,也就是當前的HttpRequest對象。注意這個處理器默認是不啟用的,你需要激活它。

          Context處理器的一些建議

          編寫處理器的一些建議:

          §                                 使每個context處理器完成盡可能小的功能。使用多個處理器是很容易的,所以你可以根據邏輯塊來分解功能以便將來重用。

          §                                 要注意TEMPLATE_CONTEXT_PROCESSORS里的context processor 將會在每個模板中有效,所以要變量的命名不要和模板的變量沖突。變量名是大小寫敏感的,所以processor的變量全用大寫是個不錯的主意。

          §                                 只要它們存放在你的Python的搜索路徑中,它們放在哪個物理路徑并不重要,這樣你可以在TEMPLATE_CONTEXT_PROCESSORS設置里指向它們。也就是說,你要把它們放在app或者project目錄里名為context_processors.py的文件。

          posted on 2008-12-01 22:28 周銳 閱讀(1241) 評論(0)  編輯  收藏 所屬分類: Python
          主站蜘蛛池模板: 广灵县| 娱乐| 临泉县| 临城县| 新沂市| 阿拉善盟| 玛多县| 洛南县| 昔阳县| 水富县| 晴隆县| 棋牌| 宿松县| 大庆市| 昔阳县| 富蕴县| 财经| 华阴市| 隆德县| 九龙县| 新兴县| 淮滨县| 松原市| 巧家县| 博罗县| 嵊泗县| 赫章县| 常山县| 开阳县| 拜泉县| 越西县| 托克托县| 大渡口区| 山东| 无为县| 鄱阳县| 莱西市| 隆安县| 盐亭县| 安岳县| 璧山县|