在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 相关文章推荐
linux系统使用python监测系统负载脚本分享
Jan 15 Python
在Python中使用swapCase()方法转换大小写的教程
May 20 Python
Python实现返回数组中第i小元素的方法示例
Dec 04 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
Python日志模块logging基本用法分析
Aug 23 Python
Python Pexpect库的简单使用方法
Jan 29 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
python 元组和列表的区别
Dec 30 Python
用python获取txt文件中关键字的数量
Dec 24 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 google或baidu分页代码
2009/11/26 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
vuex 的简单使用
2018/03/22 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
简单介绍Python中的round()方法
2015/05/15 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
django模板语法学习之include示例详解
2017/12/17 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python3内置模块之base64编解码方法详解
2019/07/13 Python
Python之变量类型和if判断方式
2020/05/05 Python
Python使用pyexecjs代码案例解析
2020/07/13 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
python集合的新增元素方法整理
2020/12/07 Python
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
应用数学自荐书范文
2013/11/24 职场文书
优秀经理获奖感言
2014/03/04 职场文书
QQ空间主人寄语大全
2014/04/12 职场文书
投标人廉洁自律承诺书
2014/05/26 职场文书
课外活动总结
2015/02/04 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
决心书格式范文
2015/09/23 职场文书
2016春季运动会前导词
2015/11/25 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android