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}}