Карта сайта Django
Картой сайта (sitemap) называется хранящийся на веб-сайте XML- файл, который сообщает поисковым системам, как часто изменяются страницы сайта и насколько одни страницы важнее других. Это помогает поисковой системе индексировать сайт более осмысленно.
В качестве примера ниже приводится фрагмент карты сайта проекта Django (http://www.djangoproject.com/sitemap.xml):
<?xml version^’"!. О" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url>
<loc>http://www.djangoproject.com/documentation/</loc> <changefreq>weekly</changefreq> <priority>0.5</priority> </url> <url>
<loc>http://www.djangoproject.com/documentation/0_90/</loc> <changefreq>never</changefreq> <priority>0.1</priority> </url>
</urlset>
Дополнительные сведения о картах сайта см. по адресу http://www.site- maps.org/.
Подсистема карты сайта в Django автоматизирует создание этого XML- файла, позволяя выразить его содержимое в виде программного кода на языке Python. Чтобы создать карту сайта, сначала необходимо написать Sitemap-класс и сослаться в нем на конфигурацию URL.
Установка
Чтобы установить приложение sitemap, выполните следующие действия:
1. Добавьте строку ‘django.contrib.sitemaps’ в параметр INSTALLED_APPS.
2. Убедитесь, что в параметре TEMPLATE_LOADERS присутствует строка ‘django.template.loaders.app_directories.load_template_source’. По умолчанию она там есть, поэтому вносить изменения придется, только если ранее вы изменили список загрузчиков шаблонов.
3. Убедитесь, что установлена подсистема сайтов (см. главу 16).
Примечание ——————————————————————————
Приложение sitemap ничего не добавляет в базу данных. Его необходимо добавить в параметр INSTALLED_APPS только для того, чтобы загрузчик шаблонов load_template_source смог отыскать шаблоны по умолчанию.
Инициализация
Чтобы активировать создание карты сайта на своем Django-сайте, добавьте в конфигурацию URL такую строку:
(г’"sitemap\.xml$’, ‘django.contrib. sitemaps.views.sitemap’ , {‘sitemaps’: sitemaps})
Эта строка предписывает Django построить карту сайта при обращении к URL /sitemap, xml. (Обратите внимание, что точка в названии файла sitemap, xml экранируется символом обратного слеша, так как точка в регулярных выражениях имеет особый смысл.)
Конкретное имя файла карты сайта не важно, а вот местоположение существенно. Поисковые системы индексируют ссылки в карте сайта только на уровне текущего URL и ниже. Например, если файл sitemap, xml находится в корневом каталоге, то он может ссылаться на любой URL сайта. Но если карта сайта хранится в файле /content/sitemap.xml, то ей разрешено ссылаться только на URL, начинающиеся с /content/.
Представление карты сайта принимает еще один обязательный параметр {‘sitemaps’: sitemaps}. Здесь предполагается, что sitemaps - словарь, отображающий короткую метку раздела (например, blog или news) на соответствующий ей Sitemap-класс (например, BlogSitemap или NewsSitemap). Метке может также соответствовать экземпляр Sitemap- класса (например, BlogSitemap(some_var)).
Sitemap-классы
Sitemap-класс - это обычный класс Python, который представляет отдельный раздел в карте сайта. Например, один Sitemap-класс может представлять все записи о блоге, а другой - все записи в календаре событий.
В простейшем случае все разделы объединяются в один файл sitemap, xml, но подсистема может создать индекс карт сайта, который ссылается на отдельные карты, по одной на каждый раздел (см. ниже).
Все Sitemap-классы должны наследовать класс django.contrib.sitemaps. Sitemap и могут находиться в любом месте дерева проекта. Предположим, к примеру, что имеется система блогов с моделью Entry, и ваша задача - построить карту сайта, которая включала бы ссылки на отдельные записи в блогах. Вот как может выглядеть соответствующий Sitemap-класс:
from django.contrib.sitemaps import Sitemap from mysite.blog.models import Entry
class BlogSitemap(Sitemap): changefreq = "never" priority =0.5
def items(self):
return Entry.objects.filtcr(is_draft=False)
def lastmod(self, obj): return obj.pub_date
Объявление Sitemap-класса очень напоминает объявление Feed-класса. Это не случайно. Как и в случае Feed-классов, члены Sitemap-класса могут быть как методами, так и атрибутами. О том, как работает этот механизм, см. раздел «Более сложный канал» выше.
В Sitemap-классе могут быть определены следующие методы или атрибуты:
• items (обязательный): предоставляет список объектов. Тип объектов системе безразличен, важно лишь, что они передаются методам
locationQ, lastmod(), changefreqO и priorityQ.
• location (необязательный): возвращает абсолютный URL данного объекта. Здесь под «абсолютным» понимается URL, не содержащий протокола и доменного имени, например:
• Правильно: ‘/too/bar/’
• Неправильно: ‘example.com/foo/bar/’
• Неправильно: ‘http://example.com/foo/bar/’
В случае отсутствия атрибута location подсистема будет вызывать метод get_absolute_url() для каждого объекта, возвращаемого методом items().
• lastmod (необязательный): дата последней модификации объекта в виде экземпляра класса Python datetime.
• changefreq (необязательный): как часто объект изменяется. Допустимы следующие значения (описанные в спецификации Sitemaps):
• ‘always’
• ‘hourly’
• ‘daily’
• ‘weekly’
• ‘monthly’
• ‘yearly’
• ‘never’
• priority (необязательный): рекомендуемый приоритет индексирования, значение между 0.0 и 1.0. По умолчанию принимается приоритет 0.5; дополнительные сведения о механизме работы приоритетов см. в документации на сайте http://www.sitemaps.org/.
Источник: Головатый А., Каплан-Мосс Дж. Django. Подробное руководство, 2-е издание. - Пер. с англ. - СПб.: Символ- Плюс, 2010. - 560 е., ил.