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按综合、销量排序抓取100页的淘宝商品列表信息
Feb 24 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
基于python3实现socket文件传输和校验
Jul 28 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
对python中list的拷贝与numpy的array的拷贝详解
Jan 29 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
Python进行统计建模
Aug 10 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 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
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Django实现的自定义访问日志模块示例
2017/06/23 Python
python 解压pkl文件的方法
2018/10/25 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
django云端留言板实例详解
2019/07/22 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
TripAdvisor印尼站:全球领先的旅游网站
2018/03/15 全球购物
单位单身证明范本
2014/01/11 职场文书
公务员党员评议表自我鉴定
2014/09/14 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android