在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之不要红头文件(2)
Sep 28 Python
Python中列表list以及list与数组array的相互转换实现方法
Sep 22 Python
Python实现购物车购物小程序
Apr 18 Python
python反编译学习之字节码详解
May 19 Python
python sklearn库实现简单逻辑回归的实例代码
Jul 01 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 Python
python3.6 tkinter实现屏保小程序
Jul 30 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Pytorch之contiguous的用法
Dec 31 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
利用python调用摄像头的实例分析
Jun 07 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 类自动载入的方法
2015/06/03 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
PHP使用自定义方法实现数组合并示例
2016/07/07 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
浅谈PHP进程管理
2019/03/08 PHP
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
JavaScript编写简单的计算器
2015/11/25 Javascript
javascript中加var和不加var的区别 你真的懂吗
2016/01/06 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
小发现之浅谈location.search与location.hash的问题
2017/06/23 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
基于vue-cli创建的项目的目录结构及说明介绍
2017/11/23 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python中dir()与__dict__属性的区别浅析
2018/12/10 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
什么是Remote Module
2016/06/10 面试题
班班通校本培训方案
2014/03/12 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
幼儿园教师演讲稿
2014/05/06 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
Python实现对齐打印 format函数的用法
2022/04/28 Python
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript