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中的json与pickle
Jul 19 Python
Django权限机制实现代码详解
Feb 05 Python
Python continue继续循环用法总结
Jun 10 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Python接口自动化判断元素原理解析
Feb 24 Python
PageFactory设计模式基于python实现
Apr 14 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 Python
如何用python 操作zookeeper
Dec 28 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
一个程序下载的管理程序(二)
2006/10/09 PHP
利用Ffmpeg获得flv视频缩略图和视频时间的代码
2011/09/15 PHP
PHP基本语法总结
2014/09/06 PHP
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
php微信扫码支付 php公众号支付
2019/03/24 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
jquery 事件执行检测代码
2009/12/09 Javascript
JavaScript原型继承之基础机制分析
2011/08/26 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
js借助ActiveXObject实现创建文件
2013/09/29 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
jQuery实现智能判断固定导航条或侧边栏的方法
2016/09/04 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
jquery 遍历hash操作示例【基于ajax交互】
2019/10/12 jQuery
JavaScript数值类型知识汇总
2019/11/17 Javascript
简单了解JS打开url的方法
2020/02/21 Javascript
python脚本作为Windows服务启动代码详解
2018/02/11 Python
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
python+opencv实现阈值分割
2018/12/26 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
python之yield和Generator深入解析
2019/09/18 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
如何让IE9以下版本(ie6/7/8)认识html5元素
2013/04/01 HTML / CSS
ProBikeKit德国:在线公路自行车专家
2018/06/03 全球购物
上海微创软件面试题
2012/06/14 面试题
生产部统计员岗位职责
2014/01/05 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
电影复兴之路观后感
2015/06/02 职场文书
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python