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之通过Python连接数据库
Oct 28 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python中property属性实例解析
Feb 10 Python
Python 实现一行输入多个值的方法
Apr 21 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
详解python之heapq模块及排序操作
Apr 04 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
Jun 17 Python
如何使用 Flask 做一个评论系统
Nov 27 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 Python
python爬虫基础之urllib的使用
Dec 31 Python
python利用opencv实现颜色检测
Feb 23 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 图像处理类1
2009/06/15 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
Javascript实现简单的富文本编辑器附演示
2014/06/16 Javascript
jquery验证邮箱格式并显示提交按钮
2015/11/07 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
基于vue2的table分页组件实现方法
2017/03/20 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
javascript变量提升和闭包理解
2018/03/12 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python简单生成随机数的方法示例
2018/03/31 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python中什么是面向对象
2020/06/11 Python
Django Form常用功能及代码示例
2020/10/13 Python
傲盾软件面试题
2015/08/17 面试题
Linux如何压缩可执行文件
2014/03/27 面试题
迟到检讨书大全
2014/01/25 职场文书
幼儿园家长寄语
2014/04/02 职场文书
小学六年级学生评语
2014/04/22 职场文书
上海世博会口号
2014/06/19 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
公司离职证明标准范本
2014/10/05 职场文书
八年级英语教学计划
2015/01/23 职场文书
神秘岛读书笔记
2015/07/01 职场文书
pytorch锁死在dataloader(训练时卡死)
2021/05/28 Python