mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +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