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代码检查工具pylint 让你的python更规范
Sep 05 Python
Python操作列表之List.insert()方法的使用
May 20 Python
python计算一个序列的平均值的方法
Jul 11 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
python实现爬山算法的思路详解
Apr 09 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
Python Numpy库常见用法入门教程
Jan 16 Python
如何在django中实现分页功能
Apr 22 Python
解决TensorFlow程序无限制占用GPU的方法
Jun 30 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 Python
Elasticsearch 数据类型及管理
Apr 19 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的array_multisort()使用方法介绍
2012/05/16 PHP
php链表用法实例分析
2015/07/09 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
基于json的jquery地区联动效果代码
2011/07/06 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
读jQuery之十一 添加事件核心方法
2011/07/31 Javascript
js jquery数组介绍
2012/07/15 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
Jquery实现顶部弹出框特效
2015/08/08 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
Bootstrap字体图标无法正常显示的解决方法
2016/10/08 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
详解nodejs中的process进程
2017/03/19 NodeJs
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
javascrit中undefined和null的区别详解
2019/04/07 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
Python中的filter()函数的用法
2015/04/27 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
定制别致的瑜伽垫:Sugarmat
2019/06/21 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
init进程的作用
2015/08/20 面试题
《雪地里的小画家》教学反思
2014/02/22 职场文书
三八红旗手事迹材料
2014/12/26 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
企业安全生产检查制度
2015/08/06 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
python实现自动清理文件夹旧文件
2021/05/10 Python