OwlCoder
Создание sitemap в django
В django есть специальные инструменты для создания сайтмапов. Сайтмапы активно используются поисковыми сайтами для индексации страниц. Что такое сайтмап можно посмотреть в википедии.
Перед началом работы добавьте в INSTALLED_APPS в конфигурации приложения следующую строку
INSTALLED_APPS = [ 'django.contrib.sitemaps', # other apps here... ]
Допустим у нас есть модель Page. Должен существовать path где нибудь в url.py с названием page.view
Пусть наше текущее приложение называется main. Тогда добавляем правило в urls.py
path('<slug:slug>/', views.page, name='page.view'), # отображение страницы
Теперь можно создать файл sitemaps.py
from django.contrib.sitemaps import Sitemap
from django.urls import reverse
from page.models import Pageclass PageSitemap(Sitemap):
priority = 1
def items(self):
return Page.objects.filter(somefield='somevalue') # получаем все страницы
def location(self, obj): # Возвращает url для каждого объекта
if obj.slug == '-': # используем для главной страницы
return '/'
return reverse('page.view', kwargs={'slug': obj.slug})
sitemaps = {
'page': PageSitemap,
# другие сайтмапы для других моделей
}
Добавляем также в url.py
from django.contrib.sitemaps.views import sitemap
urlpatterns += [ path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
from .sitemaps import sitemaps # как раз тот самый сайтмап который мы создали
name='django.contrib.sitemaps.views.sitemap')]
Теперь сайтмап доступен по адресу /sitemap.xml