在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支持断点续传的多线程下载示例
Jan 16 Python
用Python实现web端用户登录和注册功能的教程
Apr 30 Python
python实现的文件同步服务器实例
Jun 02 Python
深入理解Python3 内置函数大全
Nov 23 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
基于pytorch的保存和加载模型参数的方法
Aug 17 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
使用Django清空数据库并重新生成
Apr 03 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
Pytorch中的数据集划分&正则化方法
May 27 Python
详解Python中的for循环
Apr 30 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
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
vue实现购物车案例
2020/05/30 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
原生js实现购物车
2020/09/23 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
python使用matplotlib绘图时图例显示问题的解决
2017/04/27 Python
python添加模块搜索路径方法
2017/09/11 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
基于python OpenCV实现动态人脸检测
2018/05/25 Python
用Python实现数据的透视表的方法
2018/11/16 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Django获取应用下的所有models的例子
2019/08/30 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Python模块常用四种安装方式
2020/10/20 Python
python中操作文件的模块的方法总结
2021/02/04 Python
css3实现超炫风车特效
2014/11/12 HTML / CSS
深入浅析CSS3中的Flex布局整理
2020/04/27 HTML / CSS
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
大学生学习生活的自我评价
2013/11/01 职场文书
自荐信需注意事项
2014/01/25 职场文书
应届生求职信
2014/05/31 职场文书
党委工作总结2015
2015/04/27 职场文书
干部培训简讯
2015/07/20 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
django中websocket的具体使用
2022/01/22 Python