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转换摩斯密码示例
Feb 16 Python
Python文件夹与文件的操作实现代码
Jul 13 Python
Python 3.x 新特性及10大变化
Jun 12 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
python try 异常处理(史上最全)
Mar 07 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
Mar 08 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
Mar 14 Python
pandas分组聚合详解
Apr 10 Python
python缺失值填充方法示例代码
Dec 24 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PHP调用全国天气预报数据接口查询天气示例
2019/02/20 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
jquery 简单导航实现代码
2009/09/11 Javascript
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
JS打开新窗口的2种方式
2013/04/18 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
2015/09/07 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
利用angular.copy取消变量的双向绑定与解析
2016/11/25 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python异常的检测和处理方法
2018/10/26 Python
Python List cmp()知识点总结
2019/02/18 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
Python 爬虫的原理
2020/07/30 Python
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
印度最大的时尚购物网站:Myntra
2018/09/13 全球购物
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
好的演讲稿开场白
2013/12/30 职场文书
生日庆典策划方案
2014/06/02 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
董事长开业致辞
2015/07/29 职场文书
如何在Python中创建二叉树
2021/03/30 Python
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python