Index: django/conf/global_settings.py
===================================================================
--- django/conf/global_settings.py	(revision 917)
+++ django/conf/global_settings.py	(working copy)
@@ -58,8 +58,10 @@
 # List of locations of the template source files, in search order.
 TEMPLATE_DIRS = ()
 
-# Extension on all templates.
-TEMPLATE_FILE_EXTENSION = '.html'
+# File extensions added to template names when doing something like {% extends "blah" %}.
+TEMPLATE_FILE_EXTENSIONS = (
+    ".html",
+)
 
 # List of callables that know how to import templates from various sources.
 # See the comments in django/core/template/loader.py for interface
Index: django/core/template/loaders/app_directories.py
===================================================================
--- django/core/template/loaders/app_directories.py	(revision 917)
+++ django/core/template/loaders/app_directories.py	(working copy)
@@ -1,6 +1,6 @@
 # Wrapper for loading templates from "template" directories in installed app packages.
 
-from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
+from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSIONS
 from django.core.template import TemplateDoesNotExist
 import os
 
@@ -19,10 +19,11 @@
 
 def load_template_source(template_name, template_dirs=None):
     for template_dir in app_template_dirs:
-        filepath = os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
-        try:
-            return open(filepath).read()
-        except IOError:
-            pass
+        for template_ext in TEMPLATE_FILE_EXTENSIONS:
+            filepath = os.path.join(template_dir, template_name) + template_ext
+            try:
+                return open(filepath).read()
+            except IOError:
+                pass
     raise TemplateDoesNotExist, template_name
 load_template_source.is_usable = True
Index: django/core/template/loaders/filesystem.py
===================================================================
--- django/core/template/loaders/filesystem.py	(revision 917)
+++ django/core/template/loaders/filesystem.py	(working copy)
@@ -1,6 +1,6 @@
 # Wrapper for loading templates from the filesystem.
 
-from django.conf.settings import TEMPLATE_DIRS, TEMPLATE_FILE_EXTENSION
+from django.conf.settings import TEMPLATE_DIRS, TEMPLATE_FILE_EXTENSIONS
 from django.core.template import TemplateDoesNotExist
 import os
 
@@ -9,11 +9,12 @@
         template_dirs = TEMPLATE_DIRS
     tried = []
     for template_dir in template_dirs:
-        filepath = os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
-        try:
-            return open(filepath).read()
-        except IOError:
-            tried.append(filepath)
+        for template_ext in TEMPLATE_FILE_EXTENSIONS:
+            filepath = os.path.join(template_dir, template_name) + template_ext
+            try:
+                return open(filepath).read()
+            except IOError:
+                tried.append(filepath)
     if template_dirs:
         error_msg = "Tried %s" % tried
     else:
Index: django/core/template/loaders/eggs.py
===================================================================
--- django/core/template/loaders/eggs.py	(revision 917)
+++ django/core/template/loaders/eggs.py	(working copy)
@@ -6,7 +6,7 @@
     resource_string = None
 
 from django.core.template import TemplateDoesNotExist
-from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSION
+from django.conf.settings import INSTALLED_APPS, TEMPLATE_FILE_EXTENSIONS
 
 def load_template_source(template_name, template_dirs=None):
     """
@@ -15,11 +15,12 @@
     For every installed app, it tries to get the resource (app, template_name).
     """
     if resource_string is not None:
-        pkg_name = 'templates/' + template_name + TEMPLATE_FILE_EXTENSION
-        for app in INSTALLED_APPS:
-            try:
-                return resource_string(app, pkg_name)
-            except:
-                pass
+        for template_ext in TEMPLATE_FILE_EXTENSIONS:
+            pkg_name = 'templates/' + template_name + template_ext
+            for app in INSTALLED_APPS:
+                try:
+                    return resource_string(app, pkg_name)
+                except:
+                    pass
     raise TemplateDoesNotExist, template_name
 load_template_source.is_usable = resource_string is not None
