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


Posted in Python onJuly 12, 2020

定义临时变量:

{% 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实现定义临时变量,自定义赋值、自增实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python统计列表中的重复项出现的次数的方法
Aug 18 Python
Python ftp上传文件
Feb 13 Python
Python中基础的socket编程实战攻略
Jun 01 Python
深度定制Python的Flask框架开发环境的一些技巧总结
Jul 12 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
tensorflow TFRecords文件的生成和读取的方法
Feb 06 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
Python实现正整数分解质因数操作示例
Aug 01 Python
python数据归一化及三种方法详解
Aug 06 Python
Django框架models使用group by详解
Mar 11 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
总结Python常用的魔法方法
May 25 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 #Python
PyQt5-QDateEdit的简单使用操作
Jul 12 #Python
Python logging日志模块 配置文件方式
Jul 12 #Python
django rest framework 过滤时间操作
Jul 12 #Python
使用python脚本自动生成K8S-YAML的方法示例
Jul 12 #Python
python读取excel进行遍历/xlrd模块操作
Jul 12 #Python
django rest framework 自定义返回方式
Jul 12 #Python
You might like
php 冒泡排序 交换排序法
2011/05/10 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
2020/09/21 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
用Python给文本创立向量空间模型的教程
2015/04/23 Python
python动态网页批量爬取
2016/02/14 Python
python使用 HTMLTestRunner.py生成测试报告
2017/10/20 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python实现分数序列求和
2020/02/25 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
金融与证券专业求职信
2014/06/22 职场文书
大学团日活动总结书
2015/05/11 职场文书
杨善洲电影观后感
2015/06/04 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
SQL实现LeetCode(176.第二高薪水)
2021/08/04 MySQL