|
Table of contents
|
Карта сайта представляет собой XML файл, который располагается на вашем веб сервере и сообщает поисковым движкам как часто изменяются ваши страницы и как «важны» определённые страницы по отношению к другим страницам вашего сайта. Эта информация помогает поисковым движкам индексировать ваш сайт. Например, ниже представлена карта сайта Django (http://www.djangoproject.com/sitemap.xml): <?xml version="1.0" 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.sitemaps.org/.
Среда Django для генерации карты сайта автоматизирует создание
такого XML файла, позволяя вам выражать эту информацию в коде на
языке Python. Для того, чтобы создать карту сайта вам лишь надо
написать класс Для того, чтобы установить карту сайта в ваше приложение, следуйте нижеприведённой инструкции:
ЗамечаниеПриложение для генерации карты сайта не создаёт ни одной таблицы в базе данных. Единственная причина, по которое её требуется указывать в INSTALLED_APPS — так загрузчик шаблонов load_template_source может найти стандартные шаблоны.
Для активации генератора карты сайта добавьте следующую строку в файл привязок URL: (r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
Эта строка указывает Django, что необходимо построить карту сайта, когда клиент запросит /sitemap.xml. Имя для файла содержащего карту сайта не имеет значения, но вот расположение этого файла имеет. Поисковые движки всегда индексируют ссылки в вашей карте относительно текущего уровня URL и ниже. Например, если sitemap.xml находится в корневом каталоге сайта, он может ссылаться на любой URL вашего сайта. Однако, если карта сайта находится по URL /content/sitemap.xml, он может ссылаться на URL, начинающийся с /content/.
Представление для карты сайта принимает дополнительный
обязательный аргумент: {'sitemaps': sitemaps}. Значение sitemaps должно
быть словарём, который совпадает с сокращённой меткой
(т.е. blog или news) для своего
класса
Класс В простейшем случае все эти разделы объединяются в единый sitemap.xml. Также есть возможность использовать среду для генерации индекса карты сайта, который будет ссылаться на отдельные файлы карт, один файл на карту.
Классы
Например, предположим, что у вас есть система ведения блогов,
использующая модель Entry. И вы желаете, чтобы
карта сайта включала все ссылки на каждую запись блога. Вот
так может выглядеть ваш класс 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.filter(is_draft=False)
def lastmod(self, obj):
return obj.pub_date
Объявление
Подобно классам
Класс
Среда генерации карты сайта поставляется с рядом удобных классов пригодных для решения общих задач. Они будут описаны дальше в этой главе. Класс django.contrib.sitemaps.FlatPageSitemap просматривает все плоские, страницы определённые для текущего сайта и создаёт запись в карте сайта. Эти записи включают в себя только атрибут location. Подробности о плоских страницах приведены в главе «Средства от других разработчиков».
Класс
Для использования этого класса, создайте его экземпляр,
передав ему такой же info_dict, какой вы
передаёте базовым представлениям. Единственное требование
заключается в том, что словарь должен иметь запись
queryset. Он также может иметь запись
date_field, которая определяет поле даты для
объектов получаемых из queryset. Дата будет
использована для атрибута lastmod при
создании карты сайта. Вы также можете передать именованные
аргументы priority и
changefreq в конструктор
Ниже представлен пример файла привязок, в котором использованы FlatPageSitemap и GenericSitemap (с гипотетическим объектом Entry, о котором мы говорили ранее): from django.conf.urls.defaults import *
from django.contrib.sitemaps import FlatPageSitemap, GenericSitemap
from mysite.blog.models import Entry
info_dict = {
'queryset': Entry.objects.all(),
'date_field': 'pub_date',
}
sitemaps = {
'flatpages': FlatPageSitemap,
'blog': GenericSitemap(info_dict, priority=0.6),
}
urlpatterns = patterns('',
# some generic view using info_dict
# ...
# the sitemap
(r'^sitemap.xml$',
'django.contrib.sitemaps.views.sitemap',
{'sitemaps': sitemaps})
)
Среда генерации карты сайта также имеет возможность создавать индекс для карты сайта, который ссылается на отдельные файлы с картами сайта, по одному на каждую секцию определённою в словаре sitemaps. Отличия:
Вот так изменится предыдущий пример: (r'^sitemap.xml$',
'django.contrib.sitemaps.views.index',
{'sitemaps': sitemaps}),
(r'^sitemap-(?P<section>.+).xml$',
'django.contrib.sitemaps.views.sitemap',
{'sitemaps': sitemaps})
Это автоматически создаст файл
Вы можете организовать уведомление Google об изменениях в карте сайта, чтобы они знали, что надо произвести повторную индексацию вашего сайта. Среда предоставляет функцию для этого —
ЗамечаниеВо время работы над этой книгой только Google откликался на уведомления. Тем не менее, есть вероятность, что Yahoo и/или MSD скоро добавят поддержку уведомлений.
В этом случае, мы наверное изменим имя функции
Функция
Функция
Ниже показан полезный способ вызова
from django.contrib.sitemaps import ping_google
class Entry(models.Model):
# ...
def save(self):
super(Entry, self).save()
try:
ping_google()
except Exception:
# Простое исключение, так как мы можем получить целый
# набор исключений, относящихся к HTTP.
pass
Однако, более эффективным решением будет вызов
|
Found misprint?
Select it with the mouse and hit Enter
-
Processed:
33
1
199
25
The full repository of DjangoBook translation you can get on GitHub.
We appreciate your patches!
We are glad to hear your questions, comments or suggestions!
(Open in new tab)
Users number: 601
Русская группа
Ускорить процесс перевода!
ЯМ:41001223475816
|
| © 2008-2012 Ruslan Popov @ gmail.com | Powered by Django 1.2.5 |