diff --git a/django/template/__init__.py b/django/template/__init__.py
index 14eea5c..03e2a6c 100644
--- a/django/template/__init__.py
+++ b/django/template/__init__.py
@@ -916,6 +916,38 @@ class Library(object):
         self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
         return func
 
+    def object_tag(self, func):
+        params, xx, xxx, defaults = getargspec(func)
+
+        class ObjectNode(Node):
+            def __init__(self, vars_to_resolve, var_name):
+                self.vars_to_resolve = map(Variable, vars_to_resolve)
+                self.var_name = var_name
+
+            def render(self, context):
+                resolved_vars = [var.resolve(context) for var in self.vars_to_resolve]
+                obj = func(*resolved_vars)
+                context[self.var_name] = obj
+                return ''
+
+        def object_tag_compiler(params, defaults, name, node_class, parser, token):
+            bits = token.split_contents()[1:]
+
+            if len(bits) < 2 or bits[-2] != 'as':
+                raise TemplateSyntaxError("the next to last argument to %s must be 'as'" % name)
+
+            var_name, bits = bits[-1], bits[:-2]
+            match_number_of_arguments(bits, params, defaults, name)
+
+            return node_class(bits, var_name)
+
+        compile_func = curry(object_tag_compiler, params, defaults, getattr(func, "_decorated_function", func).__name__, ObjectNode)
+        compile_func.__doc__ = func.__doc__
+
+        self.tag(getattr(func, "_decorated_function", func).__name__, compile_func)
+
+        return func
+
     def inclusion_tag(self, file_name, context_class=Context, takes_context=False):
         def dec(func):
             params, xx, xxx, defaults = getargspec(func)
