在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 相关文章推荐
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
使用C++扩展Python的功能详解
Jan 12 Python
python调用xlsxwriter创建xlsx的方法
May 03 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
Mar 01 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
python2爬取百度贴吧指定关键字和图片代码实例
Aug 14 Python
Django项目基础配置和基本使用过程解析
Nov 25 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
解决python3输入的坑——input()
Dec 05 Python
python3.9.1环境安装的方法(图文)
Feb 02 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
用PHP读注册表
2006/10/09 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
2016/10/03 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
firefox浏览器用jquery.uploadify插件上传时报HTTP 302错误
2015/03/01 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
使用JS获取页面上的所有标签
2018/10/18 Javascript
Python-基础-入门 简介
2014/08/09 Python
Python专用方法与迭代机制实例分析
2014/09/15 Python
Python isinstance函数介绍
2015/04/14 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
python如何爬取个性签名
2018/06/19 Python
python处理“
2019/06/10 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
深度学习入门之Pytorch 数据增强的实现
2020/02/26 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
高中生自我评语大全
2014/01/19 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
心得体会的写法
2014/09/05 职场文书
停车位租赁协议书
2014/09/24 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
借条如何写
2015/05/26 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
了解Redis常见应用场景
2021/06/23 Redis