from django.template import Library, Node, TemplateSyntaxError

register = Library()


class AssignNode(Node):
	def __init__(self, name, value):
		self.name = name
		self.value = value

	def render(self, context):
		context[self.name] = self.value.resolve(context, True)
		return ''


@register.tag
def assign(parser, token):
	"""
	Assign an expression to a variable in the current context.
    
	Syntax::
		{% assign [name] [value] %}
	Example::
		{% assign list entry.get_related %}
        
	"""
	parts = token.split_contents()
	if len(parts) != 3:
		raise TemplateSyntaxError("'%s' tag takes two arguments" % parts[0])
	value = parser.compile_filter(parts[2])
	return AssignNode(parts[1], value)


