怎么在django框架中自定义模板标签

  介绍

本篇文章为大家展示了怎么在django框架中自定义模板标签,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

django提供了丰富的模板标签(模板标签)和过滤器(tempalte过滤器),但这些并非完全能满足自己的需要,所以django也提供了自定义模板标签和过滤器。自定义这些标签其实很简单,用一个方法举例,今天有一个需要在页面中计算几个数的乘积的需求,比如订单数量*订单价格*商品折扣。

也许有人会说,可以在视图中先计算好,然后再显示在界面上,当然,这样做是可以的。对于比较方便的,确实可以在视图中就计算好,如果不方便的,有的数据需要组合,拼凑的,也未必方便,所以试着写如下一个计算乘积的标记:

#编码:utf - 8   & # 39;& # 39;& # 39;   Created 提醒;2012-12-19   @author: yihaomen.com   计算多个数的乘积   & # 39;& # 39;& # 39;   得到django  import 模板   得到django.template.base  import  resolve_variable,节点,TemplateSyntaxError   时间=register  template.Library ()   class  MulTag(节点):   def 才能__init__(自我,numList):   ,,,self.numList =numList   def 才能使(自我,,背景):   ,,,realList =, []   ,,,试一试:   ,,,,,for  numobj 拷贝self.numList:   ,,,,,,,realList.append (numobj.resolve(上下文)   ,,,除了:   ,,,,,raise  TemplateSyntaxError (“multag  error")   ,,,试一试:   ,,,,,value =, realList [0]   ,,,,,for  num 拷贝realList [1:]:   ,,,,,,,value =*, num值   ,,,,,return 轮(价值,2)   ,,,除了:   ,,,,,return  & # 39; & # 39;   @register.tag (name=癿ymul")   def  getMulNums(解析器,,令牌):   时间=bits 才能;token.contents.split ()   realList 才能=,[parser.compile_filter (x), for  x 拷贝位[1:]]   return 才能MulTag (realList)

基本上所有的django模板标签都是这种写法,这里需要注意的是

1。在getMulNums方法里的<代码> parser.compile_filter 这个非常重要。

2。在Multag中的<代码> numobj.resolve(上下文)

有了以上的方法,才能正确得到模板中上下文的内容,否则你只能写死内容(<代码> {% mymul 3 4 5 6%} 这种方式)

比如,在视图视图的背景中有秩序,项,对象在模板中有如下计算

{%, load  myMulTag  %}   {% mymul  order.num  item.price  item.discount %}

这样就能计算出值来,无论多少个相乘,都可以得到结果。

另外还有一点要注意的就是自己写的模板标签,一定要保存在应用下的templatetags目录下。否则加载不成功。

这个写django模板标签的方式,具有代表性,其他的标签可以用类似的方法写出来,写成自己需要的业务规则就可以,接收的参数类型不同而已。

上述内容就是怎么在django框架中自定义模板标签,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

怎么在django框架中自定义模板标签