在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处理文本文件并生成指定格式的文件
Jul 31 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python实现的rsa加密算法详解
Jan 24 Python
Python中sort和sorted函数代码解析
Jan 25 Python
TensorFlow神经网络优化策略学习
Mar 09 Python
Python csv模块使用方法代码实例
Aug 29 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
Python新手学习标准库模块命名
May 29 Python
python 录制系统声音的示例
Dec 21 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
PR值查询 | PageRank 查询
2006/12/20 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
2011/06/16 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
Yii2设置默认控制器的两种方法
2017/05/19 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
django中的ajax组件教程详解
2018/10/18 PHP
php多进程应用场景实例详解
2019/07/22 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
javascript学习网址备忘
2007/05/29 Javascript
javascript中的几个运算符
2007/06/29 Javascript
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
JavaScript Sort 表格排序
2009/10/31 Javascript
js中将具有数字属性名的对象转换为数组
2011/03/06 Javascript
Dom操作之兼容技巧分享
2011/09/20 Javascript
Jquery实现仿腾讯微博发表广播
2014/11/17 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
Angularjs结合Bootstrap制作的一个TODO List
2016/08/18 Javascript
Bootstrap CSS布局之表格
2016/12/17 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
vue中监听返回键问题
2019/08/28 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python内存映射文件读写方式
2020/04/24 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
彩妆大赛策划方案
2014/05/13 职场文书
幸福中国演讲稿
2014/09/12 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
2019年员工晋升管理制度范本!
2019/07/08 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL