Index: django/contrib/sitemaps/tests/basic.py
===================================================================
--- django/contrib/sitemaps/tests/basic.py	(revision 14827)
+++ django/contrib/sitemaps/tests/basic.py	(working copy)
@@ -1,3 +1,4 @@
+import os
 from datetime import date
 from django.conf import settings
 from django.contrib.auth.models import User
@@ -16,13 +17,41 @@
     def setUp(self):
         self.old_USE_L10N = settings.USE_L10N
         self.old_Site_meta_installed = Site._meta.installed
+        self.old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
+        settings.TEMPLATE_DIRS = (
+            os.path.join(os.path.dirname(__file__), 'templates'),
+        )
         # Create a user that will double as sitemap content
         User.objects.create_user('testuser', 'test@example.com', 's3krit')
 
     def tearDown(self):
         settings.USE_L10N = self.old_USE_L10N
         Site._meta.installed = self.old_Site_meta_installed
+        settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
 
+    def test_simple_sitemap_index(self):
+        "A simple sitemap index can be rendered"
+        # Retrieve the sitemap.
+        response = self.client.get('/simple/index.xml')
+        # Check for all the important bits:
+        self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<sitemap><loc>http://example.com/simple/sitemap-simple.xml</loc></sitemap>
+</sitemapindex>
+""")
+    
+    def test_simple_sitemap_custom_index(self):
+        "A simple sitemap index can be rendered with a custom template"
+        # Retrieve the sitemap.
+        response = self.client.get('/simple/custom-index.xml')
+        # Check for all the important bits:
+        self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a customised template -->
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<sitemap><loc>http://example.com/simple/sitemap-simple.xml</loc></sitemap>
+</sitemapindex>
+""")
+    
     def test_simple_sitemap(self):
         "A simple sitemap can be rendered"
         # Retrieve the sitemap.
@@ -34,6 +63,18 @@
 </urlset>
 """ % date.today().strftime('%Y-%m-%d'))
 
+    def test_simple_custom_sitemap(self):
+        "A simple sitemap can be rendered with a custom template"
+        # Retrieve the sitemap.
+        response = self.client.get('/simple/custom-sitemap.xml')
+        # Check for all the important bits:
+        self.assertEquals(response.content, """<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a customised template -->
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+<url><loc>http://example.com/location/</loc><lastmod>%s</lastmod><changefreq>never</changefreq><priority>0.5</priority></url>
+</urlset>
+""" % date.today().strftime('%Y-%m-%d'))
+        
     @skipUnless(settings.USE_I18N, "Internationalization is not enabled")
     def test_localized_priority(self):
         "The priority value should not be localized (Refs #14164)"
Index: django/contrib/sitemaps/tests/urls.py
===================================================================
--- django/contrib/sitemaps/tests/urls.py	(revision 14827)
+++ django/contrib/sitemaps/tests/urls.py	(working copy)
@@ -27,7 +27,11 @@
 }
 
 urlpatterns = patterns('django.contrib.sitemaps.views',
+    (r'^simple/index\.xml$', 'index', {'sitemaps': simple_sitemaps}),
+    (r'^simple/custom-index\.xml$', 'index', {'sitemaps': simple_sitemaps, 'template_name': u'custom_sitemap_index.xml'}),
+    (r'^simple/sitemap-(?P<section>.+)\.xml$', 'sitemap', {'sitemaps': simple_sitemaps}),
     (r'^simple/sitemap\.xml$', 'sitemap', {'sitemaps': simple_sitemaps}),
+    (r'^simple/custom-sitemap\.xml$', 'sitemap', {'sitemaps': simple_sitemaps, 'template_name': u'custom_sitemap.xml'}),
     (r'^generic/sitemap\.xml$', 'sitemap', {'sitemaps': generic_sitemaps}),
     (r'^flatpages/sitemap\.xml$', 'sitemap', {'sitemaps': flatpage_sitemaps}),
 )
Index: django/contrib/sitemaps/tests/templates/custom_sitemap_index.xml
===================================================================
--- django/contrib/sitemaps/tests/templates/custom_sitemap_index.xml	(revision 0)
+++ django/contrib/sitemaps/tests/templates/custom_sitemap_index.xml	(revision 0)
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a customised template -->
+<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{% for location in sitemaps %}<sitemap><loc>{{ location }}</loc></sitemap>{% endfor %}
+</sitemapindex>
Index: django/contrib/sitemaps/tests/templates/custom_sitemap.xml
===================================================================
--- django/contrib/sitemaps/tests/templates/custom_sitemap.xml	(revision 0)
+++ django/contrib/sitemaps/tests/templates/custom_sitemap.xml	(revision 0)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a customised template -->
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{% spaceless %}
+{% for url in urlset %}
+  <url>
+    <loc>{{ url.location }}</loc>
+    {% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
+    {% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
+    {% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
+  </url>
+{% endfor %}
+{% endspaceless %}
+</urlset>
Index: django/contrib/sitemaps/views.py
===================================================================
--- django/contrib/sitemaps/views.py	(revision 14827)
+++ django/contrib/sitemaps/views.py	(working copy)
@@ -5,7 +5,7 @@
 from django.utils.encoding import smart_str
 from django.core.paginator import EmptyPage, PageNotAnInteger
 
-def index(request, sitemaps):
+def index(request, sitemaps, template_name='sitemap_index.xml'):
     current_site = get_current_site(request)
     sites = []
     protocol = request.is_secure() and 'https' or 'http'
@@ -20,10 +20,10 @@
         if pages > 1:
             for page in range(2, pages+1):
                 sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
-    xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
+    xml = loader.render_to_string(template_name, {'sitemaps': sites})
     return HttpResponse(xml, mimetype='application/xml')
 
-def sitemap(request, sitemaps, section=None):
+def sitemap(request, sitemaps, template_name='sitemap.xml', section=None):
     maps, urls = [], []
     if section is not None:
         if section not in sitemaps:
@@ -43,5 +43,5 @@
             raise Http404("Page %s empty" % page)
         except PageNotAnInteger:
             raise Http404("No page '%s'" % page)
-    xml = smart_str(loader.render_to_string('sitemap.xml', {'urlset': urls}))
+    xml = smart_str(loader.render_to_string(template_name, {'urlset': urls}))
     return HttpResponse(xml, mimetype='application/xml')
Index: docs/ref/contrib/sitemaps.txt
===================================================================
--- docs/ref/contrib/sitemaps.txt	(revision 14827)
+++ docs/ref/contrib/sitemaps.txt	(working copy)
@@ -291,6 +291,16 @@
 URLs. In this case, Django will automatically paginate the sitemap, and the
 index will reflect that.
 
+Template customization
+======================
+
+If you wish to use a different template for each sitemap or sitemap index available on your site,
+you may specify it by passing a `template_name` parameter to the `sitemap` and `index` views via
+the URLconf:
+
+    (r'^custom-sitemap\.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps, 'template_name': u'custom_sitemap.html'}),
+    (r'^custom-sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps, 'template_name': u'custom_sitemap.html'}),
+
 Pinging Google
 ==============
 
