Index: django/core/template/defaulttags.py
===================================================================
--- django/core/template/defaulttags.py	(revision 882)
+++ django/core/template/defaulttags.py	(working copy)
@@ -227,6 +227,36 @@
                 return '' # Fail silently for invalid included templates.
         return output
 
+class ConstantIncludeNode(Node):
+    def __init__(self, template_path):
+        from django.core.template.loader import get_template
+        try: 
+            t = get_template(template_path)
+            self.nodelist = t.nodelist
+        except Exception, e:
+            self.nodelist = None
+
+    def render(self, context):
+        if self.nodelist:
+            return self.nodelist.render(context)
+        else:
+            return ''
+
+class IncludeNode(Node):
+    
+    def __init__(self, template_path_var):
+        self.template_path_var = template_path_var
+
+    def render(self, context):
+        from django.core.template.loader import get_template
+        try:
+            template_path = template.resolve_variable(self.template_path_var, context)
+            print "IncludeNode rendering %s" % template_path 
+            t = get_template(template_path)
+            return t.render(context)
+        except Exception, e:
+            return '' # Fail silently for invalid included templates.
+
 class LoadNode(Node):
     def __init__(self, taglib):
         self.taglib = taglib
@@ -608,6 +638,19 @@
             raise TemplateSyntaxError, "Second (optional) argument to %s tag must be 'parsed'" % bits[0]
     return SsiNode(bits[1], parsed)
 
+def do_include(parser, token):
+    """
+    Loads a template using standard resolution mechanisms, and renders it in the current context.     
+    """
+    bits = token.contents.split()
+    if len(bits) != 2:
+        raise TemplateSyntaxError, "'include' tag takes one argument: the path to the template to be included"
+    
+    path = bits[1]
+    if path[0] in ('"', "'") and path[-1] == path[0]:
+        return ConstantIncludeNode(path[1:-1]) 
+    return IncludeNode(bits[1])
+
 def do_load(parser, token):
     """
     Load a custom template tag set.
@@ -763,6 +806,7 @@
 register_tag('ifnotequal', lambda parser, token: do_ifequal(parser, token, True))
 register_tag('if', do_if)
 register_tag('ifchanged', do_ifchanged)
+register_tag('include', do_include)
 register_tag('regroup', do_regroup)
 register_tag('ssi', do_ssi)
 register_tag('load', do_load)
