django框架自定义模板标签(template tag)操作示例

作者:轻舞肥羊 时间:2023-11-06 16:05:59 

本文实例讲述了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程序设计有所帮助。

来源:http://www.yihaomen.com/article/python/339.htm

标签:django,模板标签
0
投稿

猜你喜欢

  • 在MySQL中为何不建议使用utf8

    2024-01-27 07:07:58
  • [译]艺术和设计的差异 (1)

    2009-09-25 12:38:00
  • Python Pandas基础操作详解

    2022-02-18 11:17:07
  • 全网最详细的vscode基础教程

    2022-09-22 08:43:05
  • 深入理解Python虚拟机中字节(bytes)的实现原理及源码剖析

    2021-12-20 22:51:28
  • 对python中数据集划分函数StratifiedShuffleSplit的使用详解

    2022-12-04 23:10:28
  • Python 操作文件的基本方法总结

    2021-11-29 03:18:27
  • 为什么在MySQL中不建议使用UTF-8

    2024-01-25 17:53:29
  • Python封装成可带参数的EXE安装包实例

    2023-05-19 04:50:17
  • ubuntu16.04制作vim和python3的开发环境

    2022-08-11 00:11:07
  • sql字符串函数大全和使用方法示例

    2024-01-26 22:17:48
  • Javascript"篱式"条件判断(翻译)

    2008-08-01 12:21:00
  • SpringBoot用多线程批量导入数据库实现方法

    2024-01-23 23:03:36
  • pandas去除重复列的实现方法

    2022-06-27 12:37:31
  • OpenCV 轮廓检测的实现方法

    2023-06-16 01:40:48
  • python3爬虫之入门基础和正则表达式

    2023-04-11 12:48:02
  • Python pytest.main()运行测试用例

    2023-08-18 02:57:52
  • Windows7 64位安装最新版本MySQL服务器的图文教程

    2024-01-28 18:39:24
  • Opencv图像处理:如何判断图片里某个颜色值占的比例

    2023-09-27 16:57:40
  • python中的闭包用法实例详解

    2022-01-06 00:47:07
  • asp之家 网络编程 m.aspxhome.com