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 13 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
python验证码识别教程之滑动验证码
Jun 04 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
详解Python 解压缩文件
Apr 09 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
pycharm修改file type方式
Nov 19 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
python利用 keyboard 库记录键盘事件
Oct 16 Python
python使用ctypes库调用DLL动态链接库
Oct 22 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 危险函数解释 分析
2009/04/22 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
Vue.js实现微信过渡动画左右切换效果
2017/06/13 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python批量转换文件编码格式
2015/05/17 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
Python实现拷贝/删除文件夹的方法详解
2018/08/29 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
关于python中remove的一些坑小结
2021/01/04 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述
2013/01/30 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
linux下进程间通信的方式
2013/01/23 面试题
酒店总经理欢迎词
2014/01/08 职场文书
幼儿园实习生辞职信
2014/01/20 职场文书
企业金融服务方案
2014/06/03 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL