Re: Improved assignment_tag

2012-04-20 Thread Anssi Kääriäinen
On Apr 19, 6:21 pm, Choongmin Lee  wrote:
> Is it only me who needs a simple tag with optional assignment, e.g. that
> both {% mytag %} and {% mytag as varname %} are possible?
>
> Attached is a patch that make the assignment optional for assignment_tag.
>
> If this change of behavior of assignment_tag is not acceptable, then how
> about adding a new decorator like 'optional_assignment_tag', or adding a
> new parameter to assignment_tag?

Please clarify more why and how this should be used, as I don't get
the use-case.

BTW patches aren't usually attached to django-developers posts, we use
Trac for that (https://code.djangoproject.com/).

 - Anssi

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.



Improved assignment_tag

2012-04-19 Thread Choongmin Lee
Is it only me who needs a simple tag with optional assignment, e.g. that 
both {% mytag %} and {% mytag as varname %} are possible?

Attached is a patch that make the assignment optional for assignment_tag.

If this change of behavior of assignment_tag is not acceptable, then how 
about adding a new decorator like 'optional_assignment_tag', or adding a 
new parameter to assignment_tag?

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-developers/-/kf4o1HEDJ3oJ.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Index: django/template/base.py
===
--- django/template/base.py	(revision 17915)
+++ django/template/base.py	(working copy)
@@ -1130,14 +1130,18 @@
 params, varargs, varkw, defaults = getargspec(func)
 
 class AssignmentNode(TagHelperNode):
-def __init__(self, takes_context, args, kwargs, target_var):
+def __init__(self, takes_context, args, kwargs, target_var=None):
 super(AssignmentNode, self).__init__(takes_context, args, kwargs)
 self.target_var = target_var
 
 def render(self, context):
 resolved_args, resolved_kwargs = self.get_resolved_arguments(context)
-context[self.target_var] = func(*resolved_args, **resolved_kwargs)
-return ''
+output = func(*resolved_args, **resolved_kwargs)
+if self.target_var is None:
+return output
+else:
+context[self.target_var] = output
+return ''
 
 function_name = (name or
 getattr(func, '_decorated_function', func).__name__)
@@ -1145,11 +1149,10 @@
 def compile_func(parser, token):
 bits = token.split_contents()[1:]
 if len(bits) < 2 or bits[-2] != 'as':
-raise TemplateSyntaxError(
-"'%s' tag takes at least 2 arguments and the "
-"second last argument must be 'as'" % function_name)
-target_var = bits[-1]
-bits = bits[:-2]
+target_var = None
+else:
+target_var = bits[-1]
+bits = bits[:-2]
 args, kwargs = parse_bits(parser, bits, params,
 varargs, varkw, defaults, takes_context, function_name)
 return AssignmentNode(takes_context, args, kwargs, target_var)