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实现的数据结构与算法之链表详解
Apr 22 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
python模块smtplib学习
May 22 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
Python 离线工作环境搭建的方法步骤
Jul 29 Python
python3的url编码和解码,自定义gbk、utf-8的例子
Aug 22 Python
通过代码实例了解Python异常本质
Sep 16 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 Python
Python Pandas pandas.read_sql_query函数实例用法分析
Jun 21 Python
Python实现生活常识解答机器人
Jun 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
PHP个人网站架设连环讲(四)
2006/10/09 PHP
excellent!――ASCII Art(由目标图象生成ascii)
2007/02/20 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
window+nginx+php环境配置 附配置搭配说明
2010/12/29 PHP
PHP编码转换
2012/11/05 PHP
PHP5.5和之前的版本empty函数的不同之处
2014/06/13 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
jQuery常见开发技巧详细整理
2013/01/02 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
从零学JS之你需要了解的几本书
2014/05/19 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
jQuery实现全选、反选和不选功能的方法详解
2019/12/04 jQuery
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
python调用其他文件函数或类的示例
2019/07/16 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
德国在线购买葡萄酒网站:Geile Weine
2019/09/24 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
初中生学习生活的自我评价
2013/11/20 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
兵马俑导游词
2015/02/02 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python