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连接oracle数据库实例
Oct 17 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
Python中暂存上传图片的方法
Feb 18 Python
提升Python程序运行效率的6个方法
Mar 31 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
Sep 18 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
Django Form常用功能及代码示例
Oct 13 Python
python palywright库基本使用
Jan 21 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性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
php获取参数的几种方法总结
2014/02/18 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
swoole锁的机制代码实例讲解
2021/03/04 PHP
JavaScript事件列表解说
2006/12/22 Javascript
jscript之Read an Excel Spreadsheet
2007/06/13 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
js弹出div并显示遮罩层
2014/02/12 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
js中的 || 与 &amp;&amp; 运算符详解
2018/05/24 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
微信小程序用户授权弹窗 拒绝时引导用户重新授权实现
2019/07/29 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
独特的python循环语句
2016/11/20 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
python代码实现图书管理系统
2020/11/30 Python
大女孩胸罩:Big Girls Bras
2016/12/15 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
C语言笔试集
2012/07/24 面试题
离婚协议书应该怎么写
2014/10/12 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL