在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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
使用python和pygame绘制繁花曲线的方法
Feb 24 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
Python实现的文本对比报告生成工具示例
May 22 Python
python调用tcpdump抓包过滤的方法
Jul 18 Python
Django之无名分组和有名分组的实现
Apr 16 Python
浅谈python 中类属性共享的问题
Jul 02 Python
django创建简单的页面响应实例教程
Sep 06 Python
使用python计算三角形的斜边例子
Apr 15 Python
python 利用opencv实现图像网络传输
Nov 12 Python
python UIAutomator2使用超详细教程
Feb 19 Python
Python+Appium实现自动抢微信红包
May 21 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
无线电的诞生过程
2021/03/01 无线电
smarty获得当前url的方法分享
2014/02/14 PHP
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
微信小程序  Mustache语法详细介绍
2016/10/27 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
javaScript中"=="和"==="的区别详解
2018/03/16 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
python3使用smtplib实现发送邮件功能
2018/05/22 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
python实现飞船大战
2020/04/24 Python
私有程序集与共享程序集有什么区别
2013/04/05 面试题
网络技术支持面试题
2013/04/22 面试题
会计与出纳自荐书范文
2014/03/16 职场文书
我的求职择业计划书
2014/04/04 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
高中开学感言
2015/08/01 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python