• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 编写自定义的Django模板加载器的简单示例

编写自定义的Django模板加载器的简单示例

作者:goldensun 字体:[增加 减小] 来源:互联网

goldensun 通过本文主要向大家介绍了django 自定义标签,django 自定义权限,django自定义过滤器,python.django,django教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Djangos 内置的模板加载器(在先前的模板加载内幕章节有叙述)通常会满足你的所有的模板加载需求,但是如果你有特殊的加载需求的话,编写自己的模板加载器也会相当简单。 比如:你可以从数据库中,或者利用Python的绑定直接从Subversion库中,更或者从一个ZIP文档中加载模板。

模板加载器,也就是 TEMPLATE_LOADERS 中的每一项,都要能被下面这个接口调用:

load_template_source(template_name, template_dirs=None)

</div>

参数 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文件:

from django.conf import settings
from django.template import TemplateDoesNotExist
import zipfile

def 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

</div>

我们要想使用它,还差最后一步,就是把它加入到 TEMPLATE_LOADERS 。 如果我们将这个代码放入一个叫mysite.zip_loader的包中,那么我们要把mysite.zip_loader.load_template_source加到TEMPLATE_LOADERS中。

</div>

您可能想查找下面的文章:

  • Django自定义分页与bootstrap分页结合
  • Django自定义插件实现网站登录验证码功能
  • Django实现自定义404,500页面教程
  • Django实现自定义404,500页面教程
  • 在Django的模型中添加自定义方法的示例
  • 编写自定义的Django模板加载器的简单示例
  • 详解Django中的ifequal和ifnotequal标签使用
  • django 自定义用户user模型的三种方法

相关文章

  • 全面了解python中的类,对象,方法,属性
  • Python中使用MELIAE分析程序内存占用实例
  • Python的迭代器和生成器使用实例
  • Python使用multiprocessing实现一个最简单的分布式作业调度系统
  • Python编程之event对象的用法实例分析
  • Python实现的彩票机选器实例
  • 举例讲解Python中的身份运算符的使用方法
  • python3制作捧腹网段子页爬虫
  • Python监控主机是否存活并以邮件报警
  • Python简单日志处理类分享

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 详解Python的Django框架中Manager方法的使用
    • Python装饰器使用示例及实际应用例子
    • Python 登录网站详解及实例
    • python协程用法实例分析
    • Python的装饰器模式与面向切面编程详解
    • 收藏整理的一些Python常用方法和技巧
    • python处理cookie详解
    • Python连接数据库学习之DB-API详解
    • python登陆asp网站页面的实现代码
    • Python实现分割文件及合并文件的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有