在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 相关文章推荐
Python3使用requests登录人人影视网站的方法
May 11 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python3+Appium安装使用教程
Jul 05 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Python多进程编程multiprocessing代码实例
Mar 12 Python
Python pandas对excel的操作实现示例
Jul 21 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
使用numpy nonzero 找出非0元素
May 14 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编程之高级技巧——利用Mysql函数
2006/10/09 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
Js 刷新框架页的代码
2010/04/13 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
Vue.js实现网格列表布局转换方法
2017/08/25 Javascript
vue使用xe-utils函数库的具体方法
2018/03/06 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
node.js中ws模块创建服务端和客户端,网页WebSocket客户端
2019/03/06 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python3简单爬虫抓取网页图片代码实例
2019/08/26 Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
2021/01/27 Python
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
三万活动总结
2014/04/28 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书