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)