Добавление Sitemap

Джанго поставляется вместе с sitemap framework, который позволяет динамически создавать карту вашего сайта. С помощью sitemap вы будете помогать поисковым роботам индексировать содержимое сайта.

Sitemap framework Джанго зависит от django.contrib.sites - он позволяют связать объекты с конкретными сайтами, работающими с проектом. Это удобно, когда требуется запускать несколько сайтов с помощью одного проекта Джанго. Чтобы установить платформу Sitemap, необходимо активировать сайты и приложения Sitemap в нашем проекте. Отредактируйте файл settings.py проекта и добавьте django.contrib.sites и django.contrib.sitemaps в параметры INSTALLED_APPS. Также определите новый параметр для идентификатора сайта:

SITE_ID = 1

# Application definition
INSTALLED_APPS = (
    # ...
    'django.contrib.sites',
    'django.contrib.sitemaps',
)

Теперь выполните следующую команду, чтобы создать таблицы приложения Джанго в базе данных:

python manage.py migrate

На выходе вы уаидите следующее:

Applying sites.0001_initial... OK

Приложение sites теперь синхронизировано с базой данных. Теперь создайте новый файл в каталоге приложения блога и назовите его sitemaps.py. Откройте файл и добавьте в него следующий код:

from django.contrib.sitemaps import Sitemap
from .models import Post

class PostSitemap(Sitemap):
    changefreq = 'weekly'
    priority = 0.9

    def items(self):
        return Post.published.all()

    def lastmod(self, obj):
        return obj.publish

Мы создаем пользовательский sitemap сайта, наследуя класс Sitemap модуля sitemaps. Атрибуты changefreq и priority указывают на частоту изменения страниц post и их релевантность на веб-сайте (максимальное значение равно 1). Метод Items() возвращает QuerySet объектов, включаемых в эту схему сайта. По умолчанию Джанго вызывает метод get_absolute_url() для каждого объекта, чтобы получить его URL-адрес. Помните, что мы создали этот метод в главе 1, создав приложение блога, чтобы получить канонический URL-адрес для записей. Если требуется указать URL-адрес для каждого объекта, можно добавить метод расположения в класс sitemap. Метод lastmod получает каждый объект, возвращаемый items(), и возвращает последний раз, когда объект был изменен. Вы можете увидеть полное описание Sitemap в официальной документации Джанго, расположенной по адресу: https://docs.djangoproject.com/en/1.8/ref/contrib/sitemaps/

И наконец, нам просто нужно добавить URL-адрес карты сайта. Отредактируйте основной файл urls.py проекта и добавьте sitemap следующим образом:

from django.conf.urls import include, url
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from blog.sitemaps import PostSitemap

sitemaps = {
    'posts': PostSitemap,
}

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/', include('blog.urls'namespace='blog', app_name='blog')),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]

Здесь мы включаем требуемый импорт и определим словарь sitemaps. Мы определим шаблон URL-адреса, который соответствует sitemap.xml и использует sitemap view. Словарь sitemaps передается в sitemap view. Откройте http://127.0.0.1:8000/sitemap.xml в браузере. Вы должны увидеть XML код:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://example.com/blog/2015/09/20/another-post/</loc>
        <lastmod>2015-09-29</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.9</priority>
    </url>
    <url>
        <loc>http://example.com/blog/2015/09/20/who-was-django-reinhardt/</loc>
        <lastmod>2015-09-20</lastmod>
        <changefreq>weekly</changefreq>
        <priority>0.9</priority>
    </url>
</urlset>

URL-адрес для каждой записи был построен с помощью метода get_absolute_url(). Атрибут lastmod соответствует полю publish, как указано в нашей карте Sitemap, а атрибуты changefreq и priority также взяты из нашего класса PostSitemap. Можно увидеть, что домен, используемый для построения URL-адресов, назван example.com. Этот домен берется из объекта сайта, хранящегося в базе данных. Этот объект по умолчанию был создан при синхронизации структуры сайтов с базой данных. Откройте в браузере страницу http://127.0.0.1:8000/admin/sites/site/ . Вы увидите следующее:

Эта админ-панель отображает список сайтов. Здесь можно задать домен или host, который будет использоваться платформой сайтов и приложениями, зависящими от нее. Чтобы создать URL-адреса, существующие в локальной среде, измените имя домена на 127.0.0.1:8000, как показано на следующем снимке экрана, и сохраните его:

Мы обращаемся к нашему местному хосту. В продакшн версии сайта необходимо будет использовать собственное имя домена для платформы sites framework.

results matching ""

    No results matching ""