|
Оглавление
|
Карта сайта представляет собой 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
Однако, более эффективным решением будет вызов
|
Увидели ошибку?
Выделите её мышкой и нажмите
-
Обработано:
1049
49
130
71
Версия книги
1.0
2.0
Версия 2.0 в процессе перевода!
Мой луч
Многообразие света
Полезное
Актуальные вакансии,
Python работа
для python-разработчиков.
Скачать в формате
CHM от 2 сентябряЗаказать PDF файл можно через почту, чат, джаббер. Всего 2WMZ. Содержимое точно соответствует содержимому сайта. Чем чаще заказываете — тем больше перевожу. Русская группа
Ускорить процесс перевода!
R130494980980
Z425285133788 E112528079659 U327380922061 Книга помогла реализовать:
|
| © 2008-2009 Ruslan Popov @ gmail.com | Powered by Django 1.1 beta 1 SVN-11114 |