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 [email protected].
To unsubscribe from this group, send email to
[email protected].
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)