国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

編寫自定義的Django模板加載器的簡單示例

2020-01-04 18:01:15
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了編寫自定義的Django模板加載器的簡單示例,Django是各色人氣Python框架中最為著名的一個,需要的朋友可以參考下

Djangos 內置的模板加載器(在先前的模板加載內幕章節有敘述)通常會滿足你的所有的模板加載需求,但是如果你有特殊的加載需求的話,編寫自己的模板加載器也會相當簡單。 比如:你可以從數據庫中,或者利用Python的綁定直接從Subversion庫中,更或者從一個ZIP文檔中加載模板。

模板加載器,也就是 TEMPLATE_LOADERS 中的每一項,都要能被下面這個接口調用:

 

 
  1. load_template_source(template_name, template_dirs=None) 

參數 template_name 是所加載模板的名稱 (和傳遞給 loader.get_template() 或者 loader.select_template() 一樣), 而 template_dirs 是一個可選的代替TEMPLATE_DIRS的搜索目錄列表。

如果加載器能夠成功加載一個模板, 它應當返回一個元組: (template_source, template_path) 。在這里的 template_source 就是將被模板引擎編譯的的模板字符串,而 template_path 是被加載的模板的路徑。 由于那個路徑可能會出于調試目的顯示給用戶,因此它應當很快的指明模板從哪里加載。

如果加載器加載模板失敗,那么就會觸發 django.template.TemplateDoesNotExist 異常。

每個加載函數都應該有一個名為 is_usable 的函數屬性。 這個屬性是一個布爾值,用于告知模板引擎這個加載器是否在當前安裝的Python中可用。 例如,如果 pkg_resources 模塊沒有安裝的話,eggs加載器(它能夠從python eggs中加載模板)就應該把 is_usable 設為 False ,因為必須通過 pkg_resources 才能從eggs中讀取數據。

一個例子可以清晰地闡明一切。 這兒是一個模板加載函數,它可以從ZIP文件中加載模板。 它使用了自定義的設置 TEMPLATE_ZIP_FILES 來取代了 TEMPLATE_DIRS 用作查找路徑,并且它假設在此路徑上的每一個文件都是包含模板的ZIP文件:

 

 
  1. from django.conf import settings 
  2. from django.template import TemplateDoesNotExist 
  3. import zipfile 
  4.  
  5. def load_template_source(template_name, template_dirs=None): 
  6. "Template loader that loads templates from a ZIP file." 
  7.  
  8. template_zipfiles = getattr(settings, "TEMPLATE_ZIP_FILES", []) 
  9.  
  10. # Try each ZIP file in TEMPLATE_ZIP_FILES. 
  11. for fname in template_zipfiles: 
  12. try
  13. z = zipfile.ZipFile(fname) 
  14. source = z.read(template_name) 
  15. except (IOError, KeyError): 
  16. continue 
  17. z.close() 
  18. # We found a template, so return the source. 
  19. template_path = "%s:%s" % (fname, template_name) 
  20. return (source, template_path) 
  21.  
  22. # If we reach here, the template couldn't be loaded 
  23. raise TemplateDoesNotExist(template_name) 
  24.  
  25. # This loader is always usable (since zipfile is included with Python) 
  26. load_template_source.is_usable = True 

我們要想使用它,還差最后一步,就是把它加入到 TEMPLATE_LOADERS 。 如果我們將這個代碼放入一個叫mysite.zip_loader的包中,那么我們要把mysite.zip_loader.load_template_source加到TEMPLATE_LOADERS中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 闵行区| 大同县| 栖霞市| 保康县| 吉安市| 资溪县| 望城县| 唐河县| 汝州市| 江西省| 资溪县| 汽车| 凤翔县| 兴和县| 中宁县| 五华县| 宝坻区| 麻栗坡县| 灵璧县| 秦安县| 岳阳市| 大兴区| 兰西县| 巴南区| 托克逊县| 西林县| 天门市| 贡觉县| 巴楚县| 丰台区| 连山| 皮山县| 巧家县| 雅安市| 都江堰市| 武宣县| 临城县| 潮安县| 报价| 襄城县| 康保县|