Django

Code

root/django/branches/gis/django/contrib/sitemaps/views.py

Revision 8215, 1.8 kB (checked in by jbronn, 4 months ago)

gis: Merged revisions 7981-8001,8003-8011,8013-8033,8035-8036,8038-8039,8041-8063,8065-8076,8078-8139,8141-8154,8156-8214 via svnmerge from trunk.

  • Property svn:eol-style set to native
Line 
1 from django.http import HttpResponse, Http404
2 from django.template import loader
3 from django.contrib.sites.models import Site
4 from django.core import urlresolvers
5 from django.utils.encoding import smart_str
6 from django.core.paginator import EmptyPage, PageNotAnInteger
7
8 def index(request, sitemaps):
9     current_site = Site.objects.get_current()
10     sites = []
11     protocol = request.is_secure() and 'https' or 'http'
12     for section, site in sitemaps.items():
13         if callable(site):
14             pages = site().paginator.num_pages
15         else:
16             pages = site.paginator.num_pages
17         sitemap_url = urlresolvers.reverse('django.contrib.sitemaps.views.sitemap', kwargs={'section': section})
18         sites.append('%s://%s%s' % (protocol, current_site.domain, sitemap_url))
19         if pages > 1:
20             for page in range(2, pages+1):
21                 sites.append('%s://%s%s?p=%s' % (protocol, current_site.domain, sitemap_url, page))
22     xml = loader.render_to_string('sitemap_index.xml', {'sitemaps': sites})
23     return HttpResponse(xml, mimetype='application/xml')
24
25 def sitemap(request, sitemaps, section=None):
26     maps, urls = [], []
27     if section is not None:
28         if section not in sitemaps:
29             raise Http404("No sitemap available for section: %r" % section)
30         maps.append(sitemaps[section])
31     else:
32         maps = sitemaps.values()
33     page = request.GET.get("p", 1)
34     for site in maps:
35         try:
36             if callable(site):
37                 urls.extend(site().get_urls(page))
38             else:
39                 urls.extend(site.get_urls(page))
40         except EmptyPage:
41             raise Http404("Page %s empty" % page)
42         except PageNotAnInteger:
43             raise Http404("No page '%s'" % page)
44     xml = smart_str(loader.render_to_string('sitemap.xml', {'urlset': urls}))
45     return HttpResponse(xml, mimetype='application/xml')
Note: See TracBrowser for help on using the browser.