django框架自定义模板标签(template tag)操作示例


Posted in Python onJune 24, 2019

本文实例讲述了django框架自定义模板标签(template tag)操作。分享给大家供大家参考,具体如下:

django 提供了丰富的模板标签(template tag)和过滤器(tempalte filter),但这些并非完全能满足自己的需要,所以django 也提供了自定义模板标签和filter. 自定义这些标签其实很简单,用一个方法举例,今天有一个需要在页面中计算几个数的乘积的需求,比如 订单数量*订单价格*商品折扣.

也许有人会说,可以在view中先计算好,然后再显示在界面上,当然,这样做是可以的。对于比较方便的,确实可以在view中就计算好,如果不方便的,有的数据需要组合,拼凑的,也未必方便。所以试着写如下一个计算乘积的tag:

#coding:utf-8
'''
Created on 2012-12-19
@author: yihaomen.com
计算多个数的乘积
'''
from django import template
from django.template.base import resolve_variable, Node, TemplateSyntaxError
register = template.Library()
class MulTag(Node):
  def __init__(self,numList):
    self.numList = numList
  def render(self, context):
    realList = []
    try:
      for numobj in self.numList:
        realList.append(numobj.resolve(context))
    except:
      raise TemplateSyntaxError("multag error")
    try:
      value = realList[0]
      for num in realList[1:]:
        value = value* num
      return round(value,2)
    except:
      return ''
@register.tag(name="mymul")
def getMulNums(parser, token):
  bits = token.contents.split()
  realList = [parser.compile_filter(x) for x in bits[1:]]
  return MulTag(realList)

基本上所有的django template tag 都是这种写法,这里需要注意的是

1. 在 getMulNums 方法里的 parser.compile_filter 这个非常重要。

2. 在Multag 中的 numobj.resolve(context)

有了以上的方法,才能正确得到模板中上下文的内容,否则你只能写死内容 ({%mymul 3 4 5 6%} 这种方式)

比如,在视图view的context中有 order ,item,对象 在模板中有如下计算

{% load myMulTag %}
{%mymul order.num item.price item.discount%}

这样就能计算出值来,无论多少个相乘,都可以得到结果.

另外还有一点要注意的就是 自己写的template tag ,一定要保存在app下的 templatetags 目录下. 否则加载不成功.

这个写django template tag的方式,具有代表性,其他的tag可以用类似的方法写出来,写成自己需要的业务规则就可以,接收的参数类型不同而已。

参考资料:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python制作企业邮箱的爆破脚本
Oct 05 Python
python实现解数独程序代码
Apr 12 Python
对pandas的dataframe绘图并保存的实现方法
Aug 05 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
python sort、sort_index方法代码实例
Mar 28 Python
Python实现变声器功能(萝莉音御姐音)
Dec 05 Python
python paramiko远程服务器终端操作过程解析
Dec 14 Python
pytorch常见的Tensor类型详解
Jan 15 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
Django在Model保存前记录日志实例
May 14 Python
基于django和dropzone.js实现上传文件
Nov 24 Python
python中使用np.delete()的实例方法
Feb 01 Python
解决Python内层for循环如何break出外层的循环的问题
Jun 24 #Python
Python 循环终止语句的三种方法小结
Jun 24 #Python
12个Python程序员面试必备问题与答案(小结)
Jun 24 #Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 #Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 #Python
python对文件目录的操作方法实例总结
Jun 24 #Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 #Python
You might like
PHP EOT定界符的使用详解
2008/09/30 PHP
php adodb分页实现代码
2009/03/19 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
2017/04/03 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
基于javascript实现动态显示当前系统时间
2016/01/28 Javascript
jQuery Dialog 取消右上角删除按钮事件
2016/09/07 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
微信小程序中hidden不生效原因的解决办法
2017/04/26 Javascript
基于jQuery解决ios10以上版本缩放问题
2017/11/03 jQuery
JavaScript门道之标准库
2018/05/26 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
python 垃圾收集机制的实例详解
2017/08/20 Python
Python 多进程并发操作中进程池Pool的实例
2017/11/01 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python面向对象多线程爬虫爬取搜狐页面的实例代码
2018/05/31 Python
PyTorch中permute的用法详解
2019/12/30 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
BeautifulSoup中find和find_all的使用详解
2020/12/07 Python
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
岗位职责的含义
2013/11/17 职场文书
21岁生日感言
2014/02/27 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
教师正风肃纪剖析材料
2014/10/20 职场文书
论文致谢词范文
2015/05/14 职场文书
合同纠纷调解书
2015/05/20 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android