Sitemap class for direct-to-template generic views

If your Django site contains pages implemented with direct-to-template generic views, this Sitemap class makes it easy to add them to your sitemap.

import datetime

from django.contrib.sitemaps import Sitemap

class DirectToTemplateSitemap(Sitemap):
  changefreq = "daily"

  def __init__(self, patterns):
    self.patterns = patterns

  def items(self):
    return [p for p in self.patterns if p.callback 
               and p.callback.__module__ == 'django.views.generic.simple'
               and p.callback.func_name == 'direct_to_template']

  def changefreq(self, obj):
    return 'daily'

  def lastmod(self, obj):
    return datetime.datetime.now()

  def location(self, obj):
    url = obj.regex.pattern.replace('^', '/').replace('$','')
    return url

To use it, put something like this in your urls.py:

from dttsitemap import DirectToTemplateSitemap

sitemaps = {
  'pages' : DirectToTemplateSitemap(urlpatterns),
}

urlpatterns += patterns('',
  (r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
)

related files

Comments have been turned off for this article, but you can always contact us about it.