gpt4 book ai didi

django template实现定义临时变量,自定义赋值、自增实例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章django template实现定义临时变量,自定义赋值、自增实例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

定义临时变量:

?
1
2
3
{ % with i = 1 % }
{{i}}
{ % endwith % }

定义对临时变量操作的tag 。

在templatetags中创建set_val.py 。

内容是 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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 %} 。

前端代码示例 。

?
1
2
3
4
5
{ % load set_val % }
  <div class = "layui-form-item" >
    <div class = "layui-form-label" >商品尺码< / div>
    <div class = "layui-input-block" >
      { % with i = 1 % }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     { % 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文件中 。

?
1
2
3
4
5
6
7
8
9
@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实现定义临时变量,自定义赋值、自增实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/djshichaoren/article/details/78423554 。

最后此篇关于django template实现定义临时变量,自定义赋值、自增实例的文章就讲到这里了,如果你想了解更多关于django template实现定义临时变量,自定义赋值、自增实例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com