在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实现的飞速中文网小说下载脚本
Apr 23 Python
python实现简单购物商城
May 21 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
python 动态迁移solr数据过程解析
Sep 04 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
python标准库OS模块详解
Mar 10 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 Python
Python Numpy库的超详细教程
Apr 06 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php 空格,换行,跳格使用说明
2009/12/18 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JavaScript中的闭包
2016/02/24 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
JavaScript实现图片放大预览效果
2020/11/02 Javascript
Python 基础教程之闭包的使用方法
2017/09/29 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python os模块简单应用示例
2019/05/23 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
浅谈python元素如何去重,去重后如何保持原来元素的顺序不变
2020/02/28 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Python __slots__的使用方法
2020/11/15 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
2013年军训通讯稿
2014/02/05 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
社会体育专业大学生职业生涯规划书
2014/09/17 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
python和anaconda的区别
2022/05/06 Python