app/django/contrib/sitemaps/views.py
author Todd Larsen <tlarsen@google.com>
Wed, 24 Sep 2008 02:23:32 +0000
changeset 192 f6bf679dab26
parent 54 03e267d67478
child 323 ff1a9aa48cfd
permissions -rw-r--r--
Simple MenuItem and Menu classes for keeping track of ordered menus.

from django.http import HttpResponse, Http404
from django.template import loader
from django.contrib.sites.models import Site
from django.core import urlresolvers
from django.utils.encoding import smart_str

def index(request, sitemaps):
    current_site = Site.objects.get_current()
    sites = []
    protocol = request.is_secure() and 'https' or 'http'
    for section in sitemaps.keys():
        sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap', kwargs={'section': section})
        sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
    xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
    return HttpResponse(xml, mimetype='application/xml')

def sitemap(request, sitemaps, section=None):
    maps, urls = [], []
    if section is not None:
        if section not in sitemaps:
            raise Http404("No sitemap available for section: %r" % section)
        maps.append(sitemaps[section])
    else:
        maps = sitemaps.values()
    for site in maps:
        if callable(site):
            urls.extend(site().get_urls())
        else:
            urls.extend(site.get_urls())
    xml = smart_str(loader.render_to_string('sitemap.xml', {'urlset': urls}))
    return HttpResponse(xml, mimetype='application/xml')