在Django中编写模版节点及注册标签的方法


Posted in Python onJuly 20, 2015

编写模板节点

编写自定义标签的第二步就是定义一个拥有 render() 方法的 Node 子类。 继续前面的例子,我们需要定义 CurrentTimeNode :

import datetime

class CurrentTimeNode(template.Node):
 def __init__(self, format_string):
  self.format_string = str(format_string)

 def render(self, context):
  now = datetime.datetime.now()
  return now.strftime(self.format_string)

这两个函数( __init__() 和 render() )与模板处理中的两步(编译与渲染)直接对应。 这样,初始化函数仅仅需要存储后面要用到的格式字符串,而 render() 函数才做真正的工作。

与模板过滤器一样,这些渲染函数应该静静地捕获错误,而不是抛出错误。 模板标签只允许在编译的时候抛出错误。
注册标签

最后,你需要用你模块的Library 实例注册这个标签。 注册自定义标签与注册自定义过滤器非常类似(如前文所述)。 只需实例化一个 template.Library 实例然后调用它的 tag() 方法。 例如:

register.tag('current_time', do_current_time)

tag() 方法需要两个参数:

  1.     模板标签的名字(字符串)。
  2.     编译函数。

和注册过滤器类似,也可以在Python2.4及其以上版本中使用 register.tag装饰器:

@register.tag(name="current_time")
def do_current_time(parser, token):
 # ...

@register.tag
def shout(parser, token):
 # ...

如果你像在第二个例子中那样忽略 name 参数的话,Django会使用函数名称作为标签名称。

Python 相关文章推荐
python 获取本机ip地址的两个方法
Feb 25 Python
Python中__init__和__new__的区别详解
Jul 09 Python
21行Python代码实现拼写检查器
Jan 25 Python
python九九乘法表的实例
Sep 26 Python
Python爬虫框架Scrapy实例代码
Mar 04 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
python pandas模块基础学习详解
Jul 03 Python
python 字典访问的三种方法小结
Dec 05 Python
python为什么要安装到c盘
Jul 20 Python
matplotlib对象拾取事件处理的实现
Jan 14 Python
python 爬取京东指定商品评论并进行情感分析
May 27 Python
在Python的Django框架中编写编译函数
Jul 20 #Python
Python的Django框架中自定义模版标签的示例
Jul 20 #Python
详解在Python的Django框架中创建模板库的方法
Jul 20 #Python
简单介绍Python的Django框架加载模版的方式
Jul 20 #Python
在Django框架中编写Context处理器的方法
Jul 20 #Python
详解Django框架中用context来解析模板的方法
Jul 20 #Python
Django中URLconf和include()的协同工作方法
Jul 20 #Python
You might like
php 随机数的产生、页面跳转、件读写、文件重命名、switch语句
2009/08/07 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
PHP实现文件上传与下载
2020/08/28 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
django+mysql的使用示例
2018/11/23 Python
python学生管理系统开发
2019/01/30 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
英文简历中的自我评价
2013/10/06 职场文书
药品促销活动方案
2014/02/14 职场文书
人力资源经理的岗位职责
2014/03/02 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
MySQL查询日期时间
2022/05/15 MySQL
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL