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>
嘗試過一個(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í)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Matplotlib制作動(dòng)態(tài)圖的示例詳解
matplotlib是一個(gè)著名的python繪圖庫,由于其靈活強(qiáng)大的繪圖功能使得在python中可視化變得非常容易,本文主要介紹了在matplotlib庫中制作動(dòng)態(tài)圖的方法,需要的可以參考一下2023-06-06
python獲取代碼運(yùn)行時(shí)間的實(shí)例代碼
今天小編就為大家分享一篇python獲取代碼運(yùn)行時(shí)間的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06
Pandas實(shí)現(xiàn)在線文件和剪貼板數(shù)據(jù)讀取詳解
這篇文章主要為大家介紹的是Pandas兩種少用的讀取文件方式:讀取在線文件的數(shù)據(jù)和讀取剪貼板的數(shù)據(jù),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06
TensorFlow人工智能學(xué)習(xí)張量及高階操作示例詳解
這篇文章主要為大家介紹了TensorFlow人工智能學(xué)習(xí)張量及高階操作的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
利用python爬取m3u8格式視頻的具體實(shí)現(xiàn)
之前爬取的視頻都是mp4格式的,直接用requests請(qǐng)求就可以直接爬取,最近公司安排了一個(gè)小任務(wù),需要爬取m3u8這種格式的視頻,下面這篇文章主要給大家介紹了關(guān)于利用python爬取m3u8格式視頻的相關(guān)資料,需要的朋友可以參考下2022-08-08
用python + hadoop streaming 分布式編程(一) -- 原理介紹,樣例程序與本地調(diào)試
Hadoop 是一個(gè)實(shí)現(xiàn)了 MapReduce 計(jì)算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運(yùn)行于計(jì)算機(jī)集群上,完成海量數(shù)據(jù)的計(jì)算。2014-07-07

