在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写的Discuz7.2版faq.php注入漏洞工具
Aug 06 Python
实例讲解Python中函数的调用与定义
Mar 14 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
Sep 08 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
python3 图片referer防盗链的实现方法
Mar 12 Python
Python iter()函数用法实例分析
Mar 17 Python
Python if语句知识点用法总结
Jun 10 Python
在ubuntu16.04中将python3设置为默认的命令写法
Oct 31 Python
python 获取utc时间转化为本地时间的方法
Dec 31 Python
详解Python基础random模块随机数的生成
Mar 23 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
Python可视化学习之matplotlib内置单颜色
Feb 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
Mysql数据库操作类( 1127版,提供源码下载 )
2010/12/02 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
2016/03/13 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
python中map、any、all函数用法分析
2015/04/21 Python
python爬取NUS-WIDE数据库图片
2016/10/05 Python
django连接mysql配置方法总结(推荐)
2018/08/18 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python3列表List入门知识附实例
2020/02/09 Python
如何使用python切换hosts文件
2020/04/29 Python
Python用Jira库来操作Jira
2020/12/28 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
新西兰杂志订阅:isubscribe
2019/08/26 全球购物
BSTN意大利:德国街头和运动文化高品质商店
2020/12/22 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
应届生护士求职信
2013/11/01 职场文书
银行门卫岗位职责
2013/12/29 职场文书
培训心得体会
2013/12/29 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
法律六进活动方案
2014/03/13 职场文书
幼儿园运动会口号
2014/06/07 职场文书
团日活动总结报告
2014/06/25 职场文书
房屋租房协议书范本
2014/12/04 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书