django template實(shí)現(xiàn)定義臨時(shí)變量,自定義賦值、自增實(shí)例
定義臨時(shí)變量:
{% with i=1 %} {{i}} {% endwith %}
定義對(duì)臨時(shí)變量操作的tag
在templatetags中創(chuàng)建set_val.py
內(nèi)容是
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>
補(bǔ)充知識(shí):django模板中做一些加減乘除基本運(yùn)算
Django模版加法:
{{ value|add:10}} value=5,則返回15
Django模版減法:
{{value|add:-10}} value=5,則返回-5,這個(gè)比較好理解,減法就是加一個(gè)負(fù)數(shù)
Django模版乘法:
{% widthratio 5 1 100 %} 上面的代碼表示:5/1 *100,返回500,widthratio需要三個(gè)參數(shù),它會(huì)使用 參數(shù)1/參數(shù)2*參數(shù)3,所以要進(jìn)行乘法的話,就將參數(shù)2=1即可
Django做除法,這里用到widthratio這個(gè)方法
<td>{% widthratio foo.product_amount 100 1 %}</td>#}
如果想將widthratio函數(shù)處理后的值當(dāng)做變量,可以如下方法
{% widthratio this_value max_value max_width as width %}
{% blocktrans %}The width is: {{ width }}{% endblocktrans %}
數(shù)據(jù)保留兩位小數(shù)
<td>{{ foo.product_amount |floatformat:5 }}</td>
register = template.Library()
一些復(fù)雜一些的運(yùn)算
利用 add 這個(gè)filter ,可以做更瘋狂的事:
計(jì)算 A^2: {% widthratio A 1 A %}
計(jì)算 (A+B)^2: {% widthratio A|add:B 1 A|add:B %}
計(jì)算 (A+B) * (C+D): {% widthratio A|add:B 1 C|add:D %}
除法并保留小數(shù)
首先定義方法在templatehelper.py文件中
@register.filter def div(value, div): ''' 分轉(zhuǎn)化為元,保留兩位小數(shù) :param value: :param div: :return: ''' return round((value / div), 2)
然后在模板中可以按照如下使用,當(dāng)然前提是{% load templatehelper %}:
<td>{{ foo.product_amount |div:100 }}</td>
嘗試過(guò)一個(gè)笨辦法,但是不生效,而且就算生效,也會(huì)出現(xiàn)忽略掉小數(shù)點(diǎn)后面得值的情況,所以不建議:
<td>{% widthratio foo.product_amount 100 1 as width %}{% blocktrans %}{{ width }}{% endblocktrans %}</td>#}
以上這篇django template實(shí)現(xiàn)定義臨時(shí)變量,自定義賦值、自增實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法
這篇文章主要介紹了Django中傳遞參數(shù)到URLconf的視圖函數(shù)中的方法,Django是最具人氣的Python開(kāi)發(fā)框架,需要的朋友可以參考下2015-07-07基于Python實(shí)現(xiàn)配置熱加載的方法詳解
所謂的配置熱加載,也就是說(shuō)當(dāng)服務(wù)收到配置更新消息之后,我們不用重啟服務(wù)就可以使用最新的配置去執(zhí)行任務(wù)。本文將介紹如何用Python實(shí)現(xiàn)配置熱加載,需要的可以參考一下2022-07-07Python實(shí)現(xiàn)PDF到Word文檔的高效轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語(yǔ)言,結(jié)合庫(kù)和工具,將PDF文件轉(zhuǎn)換為可編輯的Word文檔,使文檔的編輯變得方便高效,需要的可以參考下2024-01-01python+appium+yaml移動(dòng)端自動(dòng)化測(cè)試框架實(shí)現(xiàn)詳解
這篇文章主要介紹了python+appium+yaml移動(dòng)端自動(dòng)化測(cè)試框架實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Python數(shù)據(jù)可視化之Matplotlib初級(jí)使用指南
Matplotlib是Python中最常用的數(shù)據(jù)可視化庫(kù)之一,它提供了豐富的圖表類型和靈活的自定義選項(xiàng),能幫助我們以更直觀的方式理解數(shù)據(jù),本文將對(duì)Matplotlib的基本功能進(jìn)行介紹,包括如何創(chuàng)建和自定義圖表等2023-07-07