Python的Django框架中自定义模版标签的示例


Posted in Python onJuly 20, 2015

为了自定义一个模板标签,你需要告诉Django当遇到你的标签时怎样进行这个过程。

当Django编译一个模板时,它将原始模板分成一个个 节点 。每个节点都是 django.template.Node 的一个实例,并且具备 render() 方法。 于是,一个已编译的模板就是 节点 对象的一个列表。 例如,看看这个模板:

Hello, {{ person.name }}.

{% ifequal name.birthday today %}
  Happy birthday!
{% else %}
  Be sure to come back on your birthday
  for a splendid surprise message.
{% endifequal %}

被编译的模板表现为节点列表的形式:

  •     文本节点: "Hello, "
  •     变量节点: person.name
  •     文本节点: ".\n\n"
  •     IfEqual节点: name.birthday和today

当你调用一个已编译模板的 render() 方法时,模板就会用给定的context来调用每个在它的节点列表上的所有节点的 render() 方法。 这些渲染的结果合并起来,形成了模板的输出。 因此,要自定义模板标签,你需要指明原始模板标签如何转换成节点(编译函数)和节点的render()方法完成的功能 。

在下面的章节中,我们将详细解说写一个自定义标签时的所有步骤。

Python 相关文章推荐
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python的Flask框架中web表单的教程
Apr 20 Python
Ubuntu下安装PyV8
Mar 13 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Python利用matplotlib生成图片背景及图例透明的效果
Apr 27 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
python爬虫实例之获取动漫截图
May 31 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
一行Python命令实现批量加水印
Apr 07 Python
Python如何利用pandas读取csv数据并绘图
Jul 07 Python
Sentry的安装、配置、使用教程(Sentry日志手机系统)
Jul 23 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
在Python的Django框架中包装视图函数
Jul 20 #Python
Django中URL视图函数的一些高级概念介绍
Jul 20 #Python
You might like
PHP中怎样保持SESSION不过期 原理及方案介绍
2013/08/08 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
jQuery实现div拖拽效果实例分析
2016/02/20 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
[01:00:10]完美世界DOTA2联赛PWL S2 FTD vs Inki 第二场 11.21
2020/11/24 DOTA
Python中isnumeric()方法的使用简介
2015/05/19 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
django 邮件发送模块smtp使用详解
2019/07/22 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
英国排名第一的餐具品牌:Denby Pottery
2019/11/01 全球购物
PHP开发工程师面试问题集锦
2012/11/01 面试题
Java中实现多态的机制是什么?
2014/12/07 面试题
酒店开业主持词
2015/07/02 职场文书
重阳节简报
2015/07/20 职场文书
2019年教师入党申请书
2019/06/27 职场文书
Java8中Stream的一些神操作
2021/11/02 Java/Android