django template实现定义临时变量,自定义赋值、自增实例

 更新时间:2020年7月12日 16:49  点击:1520

定义临时变量:

{% with i=1 %}
{{i}}
{% endwith %}

定义对临时变量操作的tag

在templatetags中创建set_val.py

内容是

from django import template
import logging
register = template.Library()
 
class SetVarNode(template.Node):
 
  def __init__(self, var_name, var_value):
    self.var_name = var_name
    self.var_value = var_value
 
  def render(self, context):
    try:
      value = template.Variable(self.var_value).resolve(context)
    except template.VariableDoesNotExist:
      value = ""
    context[self.var_name] = value
    return u""
 
class VarAddOneNode(template.Node):
 
  def __init__(self, var_name):
    self.var_name = var_name
 
  def render(self, context):
    try:
      value = template.Variable(self.var_name).resolve(context)
      context[self.var_name] = str( int(value) + 1 )
    except template.VariableDoesNotExist:
      value = ""
 
    return u""
 
def set_var(parser, token):
  """
    {% set <var_name> = <var_value> %}
  """
  parts = token.split_contents()
  logging.info('len(parts)=' + str(len(parts)))
  if len(parts) == 2:
    content = parts[1]
    if content[len(content)-2 :len(content)] == '++':
      var_name = content[:len(content) - 2]
      return VarAddOneNode(var_name)
    else:
      return u""
  elif len(parts) == 4:
    return SetVarNode(parts[1], parts[3])
    # raise template.TemplateSyntaxError("'set' tag must be of the form: {% set <var_name> = <var_value> %}")
 
 
register.tag('set', set_var)

然后在template中引入

{% load set_val %}

前端代码示例

 {% load set_val %}
  <div class="layui-form-item">
    <div class="layui-form-label">商品尺码</div>
    <div class="layui-input-block">
      {% with i=1 %}

	  {% set i = 2 %}
 
        {% for size in size_list %}
 
          <div class="layui-col-md2">
            <div class="layui-row">
              原名:{{ size.sizeName }}
            </div>
            名字:
            <input style="width: 40px;display:inline;" type="text" name="color" ,
                lay-verify="required"
                autocomplete="off" placeholder=""
                class="layui-input" value={{ size.sizeName }}>
            <br>
            <input type="checkbox" name="size{{ i }}" lay-skin="primary" checked="checked">
            {% set i++ %}
          </div>
        {% endfor %}
      {% endwith %}
    </div>
  </div>

补充知识:django模板中做一些加减乘除基本运算

Django模版加法:

{{ value|add:10}} value=5,则返回15

Django模版减法:

{{value|add:-10}} value=5,则返回-5,这个比较好理解,减法就是加一个负数

Django模版乘法:

{% widthratio 5 1 100 %} 上面的代码表示:5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可

Django做除法,这里用到widthratio这个方法

<td>{% widthratio foo.product_amount 100 1 %}</td>#}

如果想将widthratio函数处理后的值当做变量,可以如下方法

{% widthratio this_value max_value max_width as width %}

{% blocktrans %}The width is: {{ width }}{% endblocktrans %}

数据保留两位小数

<td>{{ foo.product_amount |floatformat:5 }}</td>

register = template.Library()

一些复杂一些的运算

利用 add 这个filter ,可以做更疯狂的事:

计算 A^2: {% widthratio A 1 A %}

计算 (A+B)^2: {% widthratio A|add:B 1 A|add:B %}

计算 (A+B) * (C+D): {% widthratio A|add:B 1 C|add:D %}

除法并保留小数

首先定义方法在templatehelper.py文件中

@register.filter
def div(value, div):
  '''
  分转化为元,保留两位小数
  :param value:
  :param div:
  :return:
  '''
  return round((value / div), 2)

然后在模板中可以按照如下使用,当然前提是{% load templatehelper %}:

<td>{{ foo.product_amount |div:100 }}</td>

尝试过一个笨办法,但是不生效,而且就算生效,也会出现忽略掉小数点后面得值的情况,所以不建议:

<td>{% widthratio foo.product_amount 100 1 as width %}{% blocktrans %}{{ width }}{% endblocktrans %}</td>#}

以上这篇django template实现定义临时变量,自定义赋值、自增实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持猪先飞。

[!--infotagslink--]

相关文章

  • PHP成员变量获取对比(类成员变量)

    下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
  • C#变量命名规则小结

    本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
  • R语言 如何删除指定变量或对象

    这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
  • php数组操作 键名比较 差集 交集赋值

    本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
  • 解决vue的router组件component在import时不能使用变量问题

    这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • Vue select 绑定动态变量的实例讲解

    这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
  • Django def clean()函数对表单中的数据进行验证操作

    这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09
  • 深入理解PHP变量的值类型和引用类型

    在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
  • vue 数据(data)赋值问题的解决方案

    这篇文章主要介绍了vue 数据(data)赋值问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • java中String类型变量的赋值问题介绍

    下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
  • C#不同类型的成员变量(字段)的默认值介绍

    虽然C#编译器为每个类型都设置了默认类型,但作为面向对象的设计原则,我们还是需要对变量进行正确的初始化。实际上这也是C#推荐的做法...2020-06-25
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • 详解ES6实现类的私有变量的几种写法

    这篇文章主要介绍了详解ES6实现类的私有变量的几种写法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-10
  • vue-admin-template配置快捷导航的代码(标签导航栏)

    这篇文章主要介绍了vue-admin-template配置快捷导航的方法(标签导航栏),本文通过实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-04
  • react使用antd表单赋值,用于修改弹框的操作

    这篇文章主要介绍了react使用antd表单赋值,用于修改弹框的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C++变量,常量,数组和字符串详解

    这篇文章主要介绍了C++变量,常量,数组和字符串,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助...2021-10-21
  • 在JS中如何使用css变量详解

    这篇文章主要给大家介绍了关于如何在JS中如何使用css变量以及export之javascript关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-02
  • JAVA中 redisTemplate 和 jedis的配合使用操作

    这篇文章主要介绍了JAVA中 redisTemplate 和 jedis的配合使用操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-13
  • Nest.js环境变量配置与序列化详解

    这篇文章主要给大家介绍了关于Nest.js环境变量配置与序列化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-21