Блог
  • Начало
  • Обо мне
  • Обратная связь

Настройка генерации карты 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
Select language:
  • Русский
  • English

  • Программирование

    Python C++ JavaScript

    Веб-разработка

    Django ASP.NET

    Мобильная разработка

    Windows Phone Android

    Разработка игр

    Unity3d Blender

    Артем Устимов © 2014