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

首頁 > 編程 > Python > 正文

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

2019-11-25 17:09:27
字體:
供稿:網(wǎng)友

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

模板加載器,也就是 TEMPLATE_LOADERS 中的每一項(xiàng),都要能被下面這個(gè)接口調(diào)用:

load_template_source(template_name, template_dirs=None)

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

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

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

每個(gè)加載函數(shù)都應(yīng)該有一個(gè)名為 is_usable 的函數(shù)屬性。 這個(gè)屬性是一個(gè)布爾值,用于告知模板引擎這個(gè)加載器是否在當(dāng)前安裝的Python中可用。 例如,如果 pkg_resources 模塊沒有安裝的話,eggs加載器(它能夠從python eggs中加載模板)就應(yīng)該把 is_usable 設(shè)為 False ,因?yàn)楸仨毻ㄟ^ pkg_resources 才能從eggs中讀取數(shù)據(jù)。

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

from django.conf import settingsfrom django.template import TemplateDoesNotExistimport zipfiledef load_template_source(template_name, template_dirs=None):  "Template loader that loads templates from a ZIP file."  template_zipfiles = getattr(settings, "TEMPLATE_ZIP_FILES", [])  # Try each ZIP file in TEMPLATE_ZIP_FILES.  for fname in template_zipfiles:    try:      z = zipfile.ZipFile(fname)      source = z.read(template_name)    except (IOError, KeyError):      continue    z.close()    # We found a template, so return the source.    template_path = "%s:%s" % (fname, template_name)    return (source, template_path)  # If we reach here, the template couldn't be loaded  raise TemplateDoesNotExist(template_name)# This loader is always usable (since zipfile is included with Python)load_template_source.is_usable = True

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌鲁木齐县| 集贤县| 博白县| 磴口县| 双鸭山市| 苏尼特左旗| 呼图壁县| 祁门县| 泽州县| 准格尔旗| 富平县| 绥阳县| 南靖县| 济宁市| 长泰县| 哈巴河县| 龙川县| 浦东新区| 若尔盖县| 许昌市| 宁海县| 永寿县| 莒南县| 赫章县| 富宁县| 龙井市| 凤庆县| 花垣县| 资中县| 邻水| 莱西市| 福建省| 商水县| 蓬溪县| 嫩江县| 定日县| 屏山县| 慈利县| 盐城市| 大姚县| 拉萨市|