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 相关文章推荐
在Linux中通过Python脚本访问mdb数据库的方法
May 06 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
解决python3中解压zip文件是文件名乱码的问题
Mar 22 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
python实现C4.5决策树算法
Aug 29 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
Aug 02 Python
Tensorflow Summary用法学习笔记
Jan 10 Python
Python dict和defaultdict使用实例解析
Mar 12 Python
opencv-python的RGB与BGR互转方式
Jun 02 Python
详解Python 循环嵌套
Jul 09 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
解决phpmyadmin 乱码,支持gb2312和utf-8
2006/11/20 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
使用jQuery同时控制四张图片的伸缩实现代码
2013/04/19 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖放商品放置购物车
2015/11/30 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
Webpack执行命令参数详解
2017/06/17 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
详解如何模拟实现node中的Events模块(通俗易懂版)
2019/04/15 Javascript
从零搭一个自用的前端脚手架的方法步骤
2019/09/23 Javascript
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python如何编写类似nmap的扫描工具
2020/11/06 Python
python中二分查找法的实现方法
2020/12/06 Python
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
介绍一下SQL中union,intersect和minus
2012/04/05 面试题
三个Unix的命令面试题
2015/04/12 面试题
仓库理货员岗位职责
2013/12/18 职场文书
新课培训心得体会
2014/09/03 职场文书
个人股份合作协议书
2014/10/24 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python