在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 相关文章推荐
30分钟搭建Python的Flask框架并在上面编写第一个应用
Mar 30 Python
python多进程共享变量
Apr 06 Python
快速了解Python相对导入
Jan 12 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
python最长回文串算法
Jun 04 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
python使用matplotlib:subplot绘制多个子图的示例
Sep 24 Python
python操作ini类型配置文件的实例教程
Oct 30 Python
Python 按比例获取样本数据或执行任务的实现代码
Dec 03 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正则的Unknown Modifier错误解决方法
2010/03/02 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
2011/11/02 PHP
linux命令之调试工具strace的深入分析
2013/06/03 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
详解Python命令行解析工具Argparse
2016/04/20 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
PyCharm代码提示忽略大小写设置方法
2018/10/28 Python
python实现事件驱动
2018/11/21 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python进度条的制作代码实例
2019/08/31 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
2020/01/08 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
2014年开学第一课活动方案
2014/03/06 职场文书
党员示范岗材料
2014/12/19 职场文书
论文答谢词
2015/01/20 职场文书
同意报考公务员证明
2015/06/17 职场文书
大学军训口号大全
2015/12/24 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
话题作文之呼唤
2019/12/18 职场文书
Python还能这么玩之只用30行代码从excel提取个人值班表
2021/06/05 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android