Index: django/conf/global_settings.py
===================================================================
--- django/conf/global_settings.py	(revision 2524)
+++ django/conf/global_settings.py	(working copy)
@@ -91,9 +91,12 @@
 # List of locations of the template source files, in search order.
 TEMPLATE_DIRS = ()
 
-# Extension on all templates.
+# Default extension for templates if none is given.
 TEMPLATE_FILE_EXTENSION = '.html'
 
+# Default extension for admin templates.
+ADMIN_TEMPLATE_FILE_EXTENSION = '.html'
+
 # List of callables that know how to import templates from various sources.
 # See the comments in django/core/template/loader.py for interface
 # documentation.
Index: django/core/template/loaders/app_directories.py
===================================================================
--- django/core/template/loaders/app_directories.py	(revision 2524)
+++ 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_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
 from django.core.exceptions import ImproperlyConfigured
 from django.core.template import TemplateDoesNotExist
 import os
@@ -28,8 +28,16 @@
 app_template_dirs = tuple(app_template_dirs)
 
 def get_template_sources(template_name, template_dirs=None):
+    admin_template_name = None
+    if not os.path.splitext(template_name):
+        # Only append file extension if there isn't an extension already.
+        if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
+            admin_template_name = template_name + TEMPLATE_FILE_EXTENSION
+        template_name = template_name + TEMPLATE_FILE_EXTENSION
     for template_dir in app_template_dirs:
-        yield os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
+        yield os.path.join(template_dir, template_name)
+        if admin_template_name:
+            yield os.path.join(template_dir, admin_template_name)
 
 def load_template_source(template_name, template_dirs=None):
     for filepath in get_template_sources(template_name, template_dirs):
Index: django/core/template/loaders/eggs.py
===================================================================
--- django/core/template/loaders/eggs.py	(revision 2524)
+++ django/core/template/loaders/eggs.py	(working copy)
@@ -6,7 +6,8 @@
     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_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
+import os
 
 def load_template_source(template_name, template_dirs=None):
     """
@@ -15,11 +16,20 @@
     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
+        admin_pkg_name = None
+        if not os.path.splitext(template_name):
+            # Only append TEMPLATE_FILE_EXTENSION if there isn't an extension already.
+            if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
+                admin_pkg_name = 'templates/' + template_name + TEMPLATE_FILE_EXTENSION
+            template_name = template_name + TEMPLATE_FILE_EXTENSION
+        pkg_name = 'templates/' + template_name
         for app in INSTALLED_APPS:
             try:
                 return (resource_string(app, pkg_name), 'egg:%s:%s ' % (app, pkg_name))
             except:
                 pass
+            if admin_pkg_name:
+                try:
+                    return (resource_string(app, admin_pkg_name), 'egg:%s:%s ' % (app, admin_pkg_name))
     raise TemplateDoesNotExist, template_name
 load_template_source.is_usable = resource_string is not None
Index: django/core/template/loaders/filesystem.py
===================================================================
--- django/core/template/loaders/filesystem.py	(revision 2524)
+++ django/core/template/loaders/filesystem.py	(working copy)
@@ -1,14 +1,21 @@
 # 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_EXTENSION, ADMIN_TEMPLATE_FILE_EXTENSION
 from django.core.template import TemplateDoesNotExist
 import os
 
 def get_template_sources(template_name, template_dirs=None):
     if not template_dirs:
         template_dirs = TEMPLATE_DIRS
+    if not os.path.splitext(template_name):
+        # Only append TEMPLATE_FILE_EXTENSION if there isn't an extension already.
+        if TEMPLATE_FILE_EXTENSION != ADMIN_TEMPLATE_FILE_EXTENSION:
+            admin_template_name = template_name + TEMPLATE_FILE_EXTENSION
+        template_name = template_name + TEMPLATE_FILE_EXTENSION
     for template_dir in template_dirs:
-        yield os.path.join(template_dir, template_name) + TEMPLATE_FILE_EXTENSION
+        yield os.path.join(template_dir, template_name)
+        if admin_template_name:
+            yield os.path.join(template_dir, admin_template_name)
 
 def load_template_source(template_name, template_dirs=None):
     tried = []
