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代理抓取并验证使用多线程实现
May 03 Python
利用Python演示数型数据结构的教程
Apr 03 Python
详解安装mitmproxy以及遇到的坑和简单用法
Jan 21 Python
Python检测数据类型的方法总结
May 20 Python
python将excel转换为csv的代码方法总结
Jul 03 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
pytest中文文档之编写断言
Sep 12 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
python中sys模块的介绍与实例
Apr 17 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 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
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
JavaScript 原型与继承说明
2010/06/09 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
Node.js中调用mysql存储过程示例
2014/12/20 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
2015/09/15 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
node.js的事件机制
2017/02/08 Javascript
Vue 2.0学习笔记之Vue中的computed属性
2017/10/16 Javascript
JS实现按钮颜色切换效果
2020/09/05 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
详解微信小程序自定义组件的实现及数据交互
2019/07/22 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
详细分析python3的reduce函数
2017/12/05 Python
用python实现的线程池实例代码
2018/01/06 Python
python如何生成网页验证码
2018/07/28 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
python的faker库用法
2019/11/28 Python
python 画图 图例自由定义方式
2020/04/17 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
Martinelli官方商店:西班牙皮鞋和高跟鞋品牌
2019/07/30 全球购物
三星印度官网:Samsung印度
2019/08/03 全球购物
信息管理应届生求职信
2014/03/07 职场文书
洗发露广告词
2014/03/14 职场文书
先进工作者申报材料
2014/12/23 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
vue判断按钮是否可以点击
2022/04/09 Vue.js