在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图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
django Serializer序列化使用方法详解
Oct 16 Python
python数据挖掘需要学的内容
Jun 23 Python
pygame实现俄罗斯方块游戏(AI篇1)
Oct 29 Python
python 实现dict转json并保存文件
Dec 05 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
Pandas实现一列数据分隔为两列
May 18 Python
Python实现画图软件功能方法详解
Jul 28 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
Nov 11 Python
python数据可视化JupyterLab实用扩展程序Mito
Nov 20 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
Laravel框架下的Contracts契约详解
2020/03/17 PHP
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
Python读写/追加excel文件Demo分享
2018/05/03 Python
从0开始的Python学习016异常
2019/04/08 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python生成随机红包的实例写法
2019/09/02 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
linux面试相关问题
2012/08/11 面试题
大学生自我评价怎样写好
2013/10/23 职场文书
高中自我鉴定
2013/12/20 职场文书
商业融资计划书
2014/04/29 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
2014年度考核工作总结
2014/12/24 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
Django分页器的用法你都了解吗
2021/05/26 Python
一文读懂navicat for mysql基础知识
2021/05/31 MySQL
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js
Python中with上下文管理协议的作用及用法
2022/03/18 Python
MySQL派生表联表查询实战过程
2022/03/20 MySQL
分享几个简单MySQL优化小妙招
2022/03/31 MySQL