django template实现定义临时变量,自定义赋值、自增实例
定义临时变量:
{%withi=1%}
{{i}}
{%endwith%}
定义对临时变量操作的tag
在templatetags中创建set_val.py
内容是
fromdjangoimporttemplate
importlogging
register=template.Library()
classSetVarNode(template.Node):
def__init__(self,var_name,var_value):
self.var_name=var_name
self.var_value=var_value
defrender(self,context):
try:
value=template.Variable(self.var_value).resolve(context)
excepttemplate.VariableDoesNotExist:
value=""
context[self.var_name]=value
returnu""
classVarAddOneNode(template.Node):
def__init__(self,var_name):
self.var_name=var_name
defrender(self,context):
try:
value=template.Variable(self.var_name).resolve(context)
context[self.var_name]=str(int(value)+1)
excepttemplate.VariableDoesNotExist:
value=""
returnu""
defset_var(parser,token):
"""
{%set=%}
"""
parts=token.split_contents()
logging.info('len(parts)='+str(len(parts)))
iflen(parts)==2:
content=parts[1]
ifcontent[len(content)-2:len(content)]=='++':
var_name=content[:len(content)-2]
returnVarAddOneNode(var_name)
else:
returnu""
eliflen(parts)==4:
returnSetVarNode(parts[1],parts[3])
#raisetemplate.TemplateSyntaxError("'set'tagmustbeoftheform:{%set=%}")
register.tag('set',set_var)
然后在template中引入
{%loadset_val%}
前端代码示例
{%loadset_val%}
商品尺码
{%seti=2%}
{%forsizeinsize_list%}
原名:{{size.sizeName}}