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字符遍历的艺术
Sep 06 Python
python3.5使用tkinter制作记事本
Jun 20 Python
浅谈python中requests模块导入的问题
May 18 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
Python画柱状统计图操作示例【基于matplotlib库】
Jul 04 Python
Python实现DDos攻击实例详解
Feb 02 Python
python学习开发mock接口
Apr 28 Python
3种python调用其他脚本的方法
Jan 06 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
关于Kotlin中SAM转换的那些事
Sep 15 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Pandas之缺失数据的实现
Jan 06 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实现搜索相似图片
2015/09/22 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
jquery dialog键盘事件代码
2010/08/01 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
如何通过js实现图片预览功能【附实例代码】
2016/03/30 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
详解nodejs操作mongodb数据库封装DB类
2017/04/10 NodeJs
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
2018/07/05 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
python sys模块sys.path使用方法示例
2013/12/04 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
python中requests库session对象的妙用详解
2017/10/30 Python
对Python通过pypyodbc访问Access数据库的方法详解
2018/10/27 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
Django中reverse反转并且传递参数的方法
2019/08/06 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
python Xpath语法的使用
2020/11/26 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
无故旷工检讨书
2014/01/26 职场文书
户外婚礼策划方案
2014/02/08 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
2014年社区工作总结
2014/11/18 职场文书
在职证明书模板
2015/06/15 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python