Подключаем sitemap к сайту на Django

Дата публикации: 29-08-2013 | Автор: MelfisFettel | Рубрика: Django, Python

Подключаем sitemap к сайту на DjangoВ одном из проектов на Django ORM понадобилось подключить карту сайта (sitemap) для того что бы скармливать ее поисковикам. Sitemap используется для указания поисковику что ему нужно проиндексировать. В принципе для небольших сайтов можно отправлять страницы вручную, но если сайт содержит более 20 страниц, это начинает напрягать. Для этого я использовал приложение Sitemaps. Решение поставленной задачи достаочно простое.

Для начала в Ваш файл settings.py необходимо подключить приложение Sitemaps. Для этого пропишите его внутрь кортежа INSTALLED_APPS:

1
2
3
...................
'django.contrib.sitemaps',
...................
...................
'django.contrib.sitemaps',
...................

Теперь создайте в папке Вашего приложения файл под названием sitemaps.py. В нем мы опишем какие именно данные будет отдавать Ваш sitemap. В качестве источника данных для генерации sitemap под Django мы будем использовать вот такую модель:

1
2
3
4
5
6
7
8
9
10
11
class Node(models.Model):
    vname = models.CharField(max_length=150)
    MText = models.TextField()
    PubDate = models.DateTimeField()
 
    class Meta:
        verbose_name = 'Node'
        verbose_name_plural = 'Nodes'
 
    def __unicode__(self):
        return self.vname
class Node(models.Model):
	vname = models.CharField(max_length=150)
    MText = models.TextField()
    PubDate = models.DateTimeField()

    class Meta:
        verbose_name = 'Node'
        verbose_name_plural = 'Nodes'

    def __unicode__(self):
        return self.vname

Теперь приступим к редактированию файла sitemap.py. Вот как он у нас будет выглядеть:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Импортируем необходимые классы
# melfis.ru
from django.contrib.sitemaps import Sitemap
# Обратите внимание, что я импортирую только класс Node. Для работы с другими классами укажите их или укажите *
from myapp.models import Node
 
# Для того что бы углубится в параметры sitemap посетите http://www.sitemaps.org/
class SitemapXML(Sitemap):
    # Как часто обновляется страница
    changefreq = 'weekly'
    # Приоритет с которым должна сканироватся страница
    priority = 0.5
 
    def items(self):
        # Выберем из модели те данные на основании которых будем строить sitemap
        return Node.objects.filter().order_by('pk')
 
    def lastmod(self, obj):
        # Укажем дату создания\изменения
        return obj.modified
 
    def location(self, obj):
        # Построим URL для страницы
        return "/node/%s/" % obj.id
# Импортируем необходимые классы
# melfis.ru
from django.contrib.sitemaps import Sitemap
# Обратите внимание, что я импортирую только класс Node. Для работы с другими классами укажите их или укажите *
from myapp.models import Node

# Для того что бы углубится в параметры sitemap посетите http://www.sitemaps.org/
class SitemapXML(Sitemap):
    # Как часто обновляется страница
    changefreq = 'weekly'
    # Приоритет с которым должна сканироватся страница
    priority = 0.5

    def items(self):
        # Выберем из модели те данные на основании которых будем строить sitemap
        return Node.objects.filter().order_by('pk')

    def lastmod(self, obj):
        # Укажем дату создания\изменения
        return obj.modified

    def location(self, obj):
        # Построим URL для страницы
        return "/node/%s/" % obj.id

Теперь допишем необходимые строчки в наш urls.py:

1
2
3
4
5
6
7
8
9
10
11
from django.conf.urls.defaults import *
# Импортируем созданный нами класс
#melfis.ru
from myapp.sitemap import SitemapXML
 
sitemaps = {'main':SitemapXML}
 
urlpatterns = patterns('',
    # И создадим URL по которому будет доступен Ваш sitemap
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps':sitemaps}),
)
from django.conf.urls.defaults import *
# Импортируем созданный нами класс
#melfis.ru
from myapp.sitemap import SitemapXML
 
sitemaps = {'main':SitemapXML}

urlpatterns = patterns('',
    # И создадим URL по которому будет доступен Ваш sitemap
    (r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps':sitemaps}),
)

На этом в принципе все. Если Вы хотите создать sitemap для других типов Ваших страниц, то достаточно:

1) Создать новый класс с другим именем: class SitemapXMLLMX(Sitemap)
2) Указать в нем требуемые источники и формирование данных
3) Импортировать этот класс в urls.py (from myapp.sitemap import SitemapXMLLMX)
4) Создать новую переменную на основании нового класса sitemapsSD = {‘main’:SitemapXMLLMX}
5) И сформировать новую строчку url (r’^sitemap2\.xml$’, ‘django.contrib.sitemaps.views.sitemap’, {‘sitemaps’:sitemapsSD}),

Понравилась статья? Расскажи друзьям:


Обсудить