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 相关文章推荐
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
Python下的subprocess模块的入门指引
Apr 16 Python
Python3中使用PyMongo的方法详解
Jul 28 Python
Python实现求数列和的方法示例
Jan 12 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
APIStar:一个专为Python3设计的API框架
Sep 26 Python
OpenCV-Python 摄像头实时检测人脸代码实例
Apr 30 Python
python实现可变变量名方法详解
Jul 01 Python
Python全面分析系统的时域特性和频率域特性
Feb 26 Python
使用keras时input_shape的维度表示问题说明
Jun 29 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
jQuery获得内容和属性方法及示例
2013/12/02 Javascript
setTimeout内不支持jquery的选择器的解决方案
2015/04/28 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
js实现小球在页面规定的区域运动
2020/06/16 Javascript
jQuery实现本地存储
2020/12/22 jQuery
Python sys.path详细介绍
2013/10/17 Python
Python在Windows和在Linux下调用动态链接库的教程
2015/08/18 Python
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
简单了解Django ContentType内置组件
2019/07/23 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
pytorch梯度剪裁方式
2020/02/04 Python
通过自学python能找到工作吗
2020/06/21 Python
如何基于Python按行合并两个txt
2020/11/03 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
制药工程专业职业生涯规划范文
2014/03/10 职场文书
幼教求职信
2014/03/12 职场文书
4s店活动策划方案
2014/08/25 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
React配置子路由的实现
2021/06/03 Javascript
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏