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利用装饰器进行运算的实例分析
Aug 04 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 Python
python监控进程脚本
Apr 12 Python
Python3处理HTTP请求的实例
May 10 Python
Python单元测试实例详解
May 25 Python
无法使用pip命令安装python第三方库的原因及解决方法
Jun 12 Python
python命令行参数用法实例分析
Jun 25 Python
Python turtle库绘制菱形的3种方式小结
Nov 23 Python
详解python安装matplotlib库三种失败情况
Jul 28 Python
Python字符串查找基本操作代码案例
Oct 27 Python
python实现登录与注册系统
Nov 30 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 彩色文字实现代码
2009/06/29 PHP
php 保留字列表
2012/10/04 PHP
PHP header()函数常用方法总结
2014/04/11 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
一个简单的js树形菜单
2011/12/09 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
js中bool值的转换及“&amp;&amp;”、“||”、 “!!”详解
2017/12/21 Javascript
Vue2 模板template的四种写法总结
2018/02/23 Javascript
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
javascript canvas检测小球碰撞
2020/04/17 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python编程羊车门问题代码示例
2017/10/25 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
对Python字符串中的换行符和制表符介绍
2018/05/03 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
sklearn和keras的数据切分与交叉验证的实例详解
2020/06/19 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
渔夫的故事教学反思
2014/02/14 职场文书
党的生日活动方案
2014/08/15 职场文书
三八妇女节慰问信
2015/02/14 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server