mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #14908 -- Added a 'takes_context' argument to simple_tag. Thanks to Julien Phalip for driving the issue and providing the final patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14987 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -872,21 +872,40 @@ class Library(object):
|
||||
self.filters[getattr(func, "_decorated_function", func).__name__] = func
|
||||
return func
|
||||
|
||||
def simple_tag(self,func):
|
||||
params, xx, xxx, defaults = getargspec(func)
|
||||
def simple_tag(self, func=None, takes_context=None):
|
||||
def dec(func):
|
||||
params, xx, xxx, defaults = getargspec(func)
|
||||
if takes_context:
|
||||
if params[0] == 'context':
|
||||
params = params[1:]
|
||||
else:
|
||||
raise TemplateSyntaxError("Any tag function decorated with takes_context=True must have a first argument of 'context'")
|
||||
|
||||
class SimpleNode(Node):
|
||||
def __init__(self, vars_to_resolve):
|
||||
self.vars_to_resolve = map(Variable, vars_to_resolve)
|
||||
class SimpleNode(Node):
|
||||
def __init__(self, vars_to_resolve):
|
||||
self.vars_to_resolve = map(Variable, vars_to_resolve)
|
||||
|
||||
def render(self, context):
|
||||
resolved_vars = [var.resolve(context) for var in self.vars_to_resolve]
|
||||
return func(*resolved_vars)
|
||||
def render(self, context):
|
||||
resolved_vars = [var.resolve(context) for var in self.vars_to_resolve]
|
||||
if takes_context:
|
||||
func_args = [context] + resolved_vars
|
||||
else:
|
||||
func_args = resolved_vars
|
||||
return func(*func_args)
|
||||
|
||||
compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, SimpleNode)
|
||||
compile_func.__doc__ = func.__doc__
|
||||
self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
|
||||
return func
|
||||
compile_func = curry(generic_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, SimpleNode)
|
||||
compile_func.__doc__ = func.__doc__
|
||||
self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
|
||||
return func
|
||||
|
||||
if func is None:
|
||||
# @register.simple_tag(...)
|
||||
return dec
|
||||
elif callable(func):
|
||||
# @register.simple_tag
|
||||
return dec(func)
|
||||
else:
|
||||
raise TemplateSyntaxError("Invalid arguments provided to simple_tag")
|
||||
|
||||
def inclusion_tag(self, file_name, context_class=Context, takes_context=False):
|
||||
def dec(func):
|
||||
|
||||
Reference in New Issue
Block a user