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中找出numpy array数组的最值及其索引方法
Apr 17 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
详解Python 函数如何重载?
Apr 23 Python
python向字符串中添加元素的实例方法
Jun 28 Python
python logging模块的使用总结
Jul 09 Python
Django框架静态文件使用/中间件/禁用ip功能实例详解
Jul 22 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
浅析python redis的连接及相关操作
Nov 07 Python
PyTorch 普通卷积和空洞卷积实例
Jan 07 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
jsTree 基于JQuery的排序节点 Bug
2011/07/26 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JS打印组合功能
2016/08/04 Javascript
Node.js学习教程之HTTP/2服务器推送【译】
2017/10/31 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
2017/12/19 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python生成验证码图片代码分享
2016/01/28 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Python3字符串encode与decode的讲解
2019/04/02 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Python的历史与优缺点整理
2020/05/26 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
优秀员工自荐信范文
2013/10/05 职场文书
总经理秘书工作职责
2013/12/26 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技