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中的变量、引用、拷贝和作用域的问题
Apr 07 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
Anaconda2 5.2.0安装使用图文教程
Sep 19 Python
Python数据分析:手把手教你用Pandas生成可视化图表的教程
Dec 15 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
May 16 Python
如何在scrapy中集成selenium爬取网页的方法
Nov 18 Python
Python 快速验证代理IP是否有效的方法实现
Jul 15 Python
python自动化测试之Selenium详解
Mar 13 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
国外PHP程序员的13个好习惯小结
2012/02/20 PHP
php多个字符串替换成同一个的解决方法
2013/06/18 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
图片翻转效果具体实现代码
2014/01/09 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
python切换hosts文件代码示例
2013/12/31 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
tornado 多进程模式解析
2018/01/15 Python
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Python使用pyodbc访问数据库操作方法详解
2018/07/05 Python
通过cmd进入python的实例操作
2019/06/26 Python
python网络编程之五子棋游戏
2020/05/14 Python
8种常用的Python工具
2020/08/05 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
军校本科大学生自我评价
2014/01/14 职场文书
感恩寄语大全
2014/04/11 职场文书
《菜园里》教学反思
2014/04/17 职场文书
联谊活动总结
2014/08/28 职场文书
师德承诺书
2015/01/20 职场文书
酒店辞职书范文
2015/02/26 职场文书
年度考核个人总结
2015/03/06 职场文书
实习证明格式范文
2015/06/16 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS