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 获取新浪微博的最新公共微博实例分享
Jul 03 Python
python中readline判断文件读取结束的方法
Nov 08 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
Jun 17 Python
python读取.mat文件的数据及实例代码
Jul 12 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
python实现俄罗斯方块小游戏
Apr 24 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
解决tensorflow 释放图,删除变量问题
Jun 23 Python
django下创建多个app并设置urls方法
Aug 02 Python
提高python代码运行效率的一些建议
Sep 29 Python
python实现扫雷游戏的示例
Oct 20 Python
Python基础之操作MySQL数据库
May 06 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 过滤器实现代码
2010/08/09 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
CI框架无限级分类+递归的实现代码
2016/11/01 PHP
php修改数组键名的方法示例
2017/04/15 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
JS中简单的实现像C#中using功能(有源码下载)
2007/01/09 Javascript
JS模拟的QQ面板上的多级可展开的菜单
2009/10/10 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
javascript比较两个日期相差天数的方法
2015/07/24 Javascript
JavaScript表单验证实例之验证表单项是否为空
2016/01/10 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
js实现盒子拖拽动画效果
2020/08/09 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
实例讲解Python中SocketServer模块处理网络请求的用法
2016/06/28 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python学习小技巧总结
2018/06/10 Python
PyQt5根据控件Id获取控件对象的方法
2019/06/25 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python搜索算法原理及实例讲解
2020/11/18 Python
CSS3属性box-sizing使用指南
2014/12/09 HTML / CSS
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
几个数据库方面的面试题
2016/07/01 面试题
计算机专业毕业生自我鉴定
2014/01/16 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
科学育儿宣传标语
2014/10/08 职场文书
公司放假通知范文
2015/04/14 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
redis 解决库存并发问题实现数量控制
2022/04/08 Redis