An expression tag

81 views
Skip to first unread message

limodou

unread,
Mar 4, 2006, 2:12:34 AM3/4/06
to django...@googlegroups.com
I'v written a expression tag, it can be used to calculate python
expression and save the result to a template variable. I think it
maybe some useful for someone.

-------------------------------utiltags.py-----------------------------------
from django import template
import re

register = template.Library()

class ExprNode(template.Node):
def __init__(self, expr_string, var_name):
self.expr_string = expr_string
self.var_name = var_name

def render(self, context):
clist = list(context)
clist.reverse()
d = {}
for c in clist:
d.update(c)
context[self.var_name] = eval(self.expr_string, d)
return ''

def do_expr(parser, token):
try:
# Splitting by None == splitting by spaces.
tag_name, arg = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError, "%r tag requires
arguments" % token.contents[0]
m = re.search(r'(.*?) as (\w+)', arg)
if not m:
raise template.TemplateSyntaxError, "%r tag had invalid
arguments" % tag_name
expr_string, var_name = m.groups()
return ExprNode(expr_string, var_name)
do_expr = register.tag('expr', do_expr)

-----------------------------How to use it---------------------------------
{% load utiltags %}
{% expr 1 as a %}
{% expr 2 as b %}
{% expr a+b as c %}
{{ a }}+{{ b }}={{ c }}

--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

Cheng Zhang

unread,
Mar 8, 2006, 11:19:44 AM3/8/06
to django...@googlegroups.com

On Mar 4, 2006, at 3:12 PM, limodou wrote:

>
> I'v written a expression tag, it can be used to calculate python
> expression and save the result to a template variable. I think it
> maybe some useful for someone.

Indeed. I just found a place to use it in our app. :-) Thanks.

- Cheng

Reply all
Reply to author
Forward
0 new messages