Памятка для себя, а так же может быть будет полезна новичкам в 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
и посмотреть что получилось.