Памятка для себя, а так же может быть будет полезна новичкам в Django. Сразу к делу:

  • для начала в settings.py добавляется 'django.contrib.sitemaps', в раздел INSTALLED_APPS
  • django.template.loaders.app_directories.Loader должен быть в TEMPLATE_LOADERS (он там по умолчанию, если не менялось)
  • должен быть установлен sites framework, если не вдаваться в подробности делается это путем добавления 'django.contrib.sites' в INSTALLED_APPS и установкой переменной SITE_ID = 1 в settings.py

С установкой все. Теперь нужно создать файл sitemaps.py:

from django.contrib.sitemaps import Sitemap
from article.models import Article
from django.core.urlresolvers import reverse


class ArticleSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return Article.objects.filter(displayable=True)

    def lastmod(self, obj):
        return obj.date

    def location(self, obj):
        return obj.slug


class StaticViewSitemap(Sitemap):
    priority = 0.5
    changefreq = 'daily'

    def items(self):
        return ['index']

    def location(self, item):
        return reverse(item)

Класс ArticleSitemap - для создания ссылок на статьи - это экземпляры класса Article. Класс StaticViewSitemap - для отображения ссылок на статические страницы, например в функции items возвращается список из имен статических страниц (index - корневая страница). В urls.py для этого нужно указать имя, в данном случае url(r'^$', 'main_blog.views.index', name='index')

Так же нужно добавить информацию в urls.py:

...
from django.contrib.sitemaps.views import sitemap
from my_blog.sitemaps import ArticleSitemap, StaticViewSitemap
...

sitemaps = {
    'articles': ArticleSitemap,
    'static': StaticViewSitemap,
    }
...

urlpatterns = patterns('',
    url(r'^$', 'main_blog.views.index', name='index'),
    ...
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps},
     name='django.contrib.sitemaps.views.sitemap')
)

Вроде бы ничего не забыл. Теперь можно зайти по http://example.com/sitemap.xml и посмотреть что получилось.