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实现的重启关机程序实例
Aug 21 Python
python排序方法实例分析
Apr 30 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
解决Python 遍历字典时删除元素报异常的问题
Sep 11 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python enumerate函数功能与用法示例
Mar 01 Python
django数据库自动重连的方法实例
Jul 21 Python
Python3 读取Word文件方式
Feb 13 Python
如何将PySpark导入Python的放实现(2种)
Apr 26 Python
Python如何实现远程方法调用
Aug 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
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
2016/05/31 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python 字典(dict)按键和值排序
2016/06/28 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python Web开发你要理解的WSGI & uwsgi详解
2018/08/01 Python
python递归全排列实现方法
2018/08/18 Python
Python3内置模块pprint让打印比print更美观详解
2019/06/02 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
python 实现一个图形界面的汇率计算器
2020/11/09 Python
C#可否对内存进行直接的操作
2015/02/26 面试题
皮肤科医师岗位职责
2013/12/04 职场文书
写好自荐信的几个要点
2013/12/26 职场文书
毕业实习评语
2014/02/10 职场文书
员工安全生产承诺书
2014/05/22 职场文书
人大代表选举标语
2014/10/07 职场文书
2014年营销工作总结
2014/11/22 职场文书
2016年小学优秀班主任事迹材料
2016/02/29 职场文书
Python利用zhdate模块实现农历日期处理
2022/03/31 Python
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js