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操作MongoDB基础知识
Nov 01 Python
python提取内容关键词的方法
Mar 16 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
使用python根据端口号关闭进程的方法
Nov 06 Python
Python操作json的方法实例分析
Dec 06 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
tensorflow没有output结点,存储成pb文件的例子
Jan 04 Python
Python loguru日志库之高效输出控制台日志和日志记录
Mar 07 Python
jupyter lab文件导出/下载方式
Apr 22 Python
Python经典五人分鱼实例讲解
Jan 04 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写的serv-u的web申请账号的程序
2006/10/09 PHP
基于文本的留言簿
2006/10/09 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
深入认识javascript中的eval函数
2009/11/02 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
jQuery解析与处理服务器端返回xml格式数据的方法详解
2016/07/04 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
node实现基于token的身份验证
2018/04/09 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
[07:57]DOTA2热力大趴狂欢夜 广州站活动回顾
2013/11/27 DOTA
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
Python六大开源框架对比
2015/10/19 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
Python中的pygal安装和绘制直方图代码分享
2017/12/08 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
大二学期个人自我评价
2014/01/13 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
不服劳动仲裁起诉书
2015/05/20 职场文书
领导离职感言
2015/08/03 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL