django template實現定義臨時變量,自定義賦值、自增實例
定義臨時變量:
{% with i=1 %}{{i}}{% endwith %}
定義對臨時變量操作的tag
在templatetags中創建set_val.py
內容是
from django import templateimport loggingregister = 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 type='text' name='color' ,lay-verify='required'autocomplete='off' placeholder='' 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.filterdef 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實現定義臨時變量,自定義賦值、自增實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。
