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列出目录下指定文件与子目录的方法
Jul 03 Python
Python网站验证码识别
Jan 25 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
python模块之subprocess模块级方法的使用
Mar 26 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
python实现按行分割文件
Jul 22 Python
使用python实现离散时间傅里叶变换的方法
Sep 02 Python
python实现广度优先搜索过程解析
Oct 19 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
pytorch 常用函数 max ,eq说明
Jun 28 Python
python正则表达式re.match()匹配多个字符方法的实现
Jan 27 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
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jquery.validate使用详解
2016/06/02 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
Vue 2.0 服务端渲染入门介绍
2017/03/29 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
python下MySQLdb用法实例分析
2015/06/08 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
Python3中的最大整数和最大浮点数实例
2019/07/09 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
Answear匈牙利:来自全球200多个知名时尚品牌
2017/04/21 全球购物
尤为Wconcept中国官网:韩国设计师品牌服饰
2019/01/10 全球购物
策划助理岗位职责
2013/11/18 职场文书
社区安全检查制度
2014/02/03 职场文书
幼儿教育感言
2014/02/05 职场文书
企业党员岗位承诺书
2015/04/27 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers