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实现一个简单的udp通信的示例代码
Feb 01 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 Python
python 并发编程 阻塞IO模型原理解析
Aug 20 Python
Python logging设置和logger解析
Aug 28 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
Nov 15 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
python如何支持并发方法详解
Jul 25 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 Python
Python数据分析入门之数据读取与存储
May 13 Python
python树莓派通过队列实现进程交互的程序分析
Jul 04 Python
Python Matplotlib库实现画局部图
Nov 17 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+MySQL 制作简单的留言本
2009/11/02 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
使用AmplifyJS组件配合JavaScript进行编程的指南
2015/07/28 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
bootstrapValidator表单验证插件学习
2016/12/30 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
JS函数节流和防抖之间的区分和实现详解
2019/01/11 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
[07:09]2014DOTA2国际邀请赛-Newbee再次发威成功晋级决赛
2014/07/19 DOTA
Python break语句详解
2014/03/11 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python matplotlib拟合直线的实现
2019/11/19 Python
python字符串判断密码强弱
2020/03/18 Python
查看keras的默认backend实现方式
2020/06/19 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
极简的HTML5模版
2015/07/09 HTML / CSS
大学生的网上创业计划书
2013/12/31 职场文书
园艺师求职信
2014/04/27 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2016党校培训心得体会
2016/01/07 职场文书
如何做好工作总结!
2019/04/10 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
python的变量和简单数字类型详解
2021/09/15 Python