Настройка генерации карты Django сайта
Дата и время: 4 июля 2014 г. 13:45 | Категория: Веб-разработка, Django
Несколько простых шагов для настройки генерации карты сайта sitemap.xml на сайтах Django.
Для начала необходимо настроить settings.py.
Настройка settings.py
Убедитесь, что в settings.py есть следующие строки, а в случае отсутствия - добавьте их.INSTALLED_APPS = (
...
'django.contrib.sitemaps',
...
)
После чего необходимо создать классы, которые будут генерировать ссылки на необходимые в карте сайта страницы.
Ссылки на динамические страницы
Рассмотрим следующую модель:from blog.models import Post
from django.contrib.sitemaps import Sitemap
class Post(models.Model):
title = models.CharField(max_length = 255)
content = models.TextField(max_length = 10000)
def get_absolute_url(self):
return "/blog/%i/" % self.id
и класс, генерирующий ссылки для sitemap.xml по данной модели:
class BlogSitemap(Sitemap):
changefreq = "never"
priority = 0.5
def items(self):
return Post.objects.all()
Как можно заметить, классы описывающие модели для карты сайта наследуются от класса Sitemap. Единственным обязательным атрибутом данных классов является items, который определяет те объекты, на которые будут ссылки в карте сайта. Если в модели объектов есть метод get_absolute_url, то он используется для получения ссылки, добавляемой в карту сайта, иначе нужно описать метод location. Свойства changefreq и priority определяют, соответственно, частоту изменения и приоритет информации, находящейся по данной ссылке. Есть также другие свойства, про которые можно почитать в документации.
Таким образом, было рассмотрено, как создать класс для генерации ссылок на динамические страницы. Теперь рассмотрим, как создать класс для добавления ссылок на статические страницы.
Ссылки на статические страницы
Также как и для динамических страниц, для статических необходимо создать класс, где метод items возвращает список имён страниц (далее будет понятно, что это за имена), а метод location должен вызывать метод reverse:
from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse
class StaticSitemap(Sitemap):
priority = 0.6
changefreq = 'never'
def items(self):
return ['about', 'contact']
def location(self, item):
return reverse(item)
После этого, необходимо сконфигурировать urls.py
Конфигурация urls.py
# Необходимо импортировать созданные нами классы
from blog.models import BlogSitemap, StaticSitemap
# Далее создать словарь со всеми классами
sitemaps = {
'posts': BlogSitemap,
'static': StaticSitemap,
}
urlpatterns = patterns('',
# В свойстве name указываются имена статических страниц, о которых рассказывалось ранее
url(r'^about/', views.aboutView, name='about'),
url(r'^contact/', views.contactView, name='contact'),
# Эта строка требуется для отображения карты сайта по адресу .../sitemap.xml
url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
)
В результате, если всё сделано без ошибок, карта сайта будет генерироваться при обращении к ней.
comments powered by Disqus