И так, для добавления карты сайта, нам необходимо добавить в settings.py встроенный модуль в Django - django.contrib.sitemaps
:
backend/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sites',
'django.contrib.sitemaps',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mptt',
'debug_toolbar',
'taggit',
'captcha',
'django_ckeditor_5',
'modules.blog.apps.BlogConfig',
'modules.system.apps.SystemConfig',
]
Если вы зашли сюда в первый раз не читая другие уроки до, не пугайтесь, это просто уроки шаг за шагом по созданию сайта, просто делайте те же шаги, добавляя лишь одно приложение django.contrib.sitemaps
На всякий случай проведем миграции:
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> python manage.py makemigrations
No changes detected
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend> python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions, sites, system, taggit
Running migrations:
No migrations to apply.
(venv) PS C:\Users\Razilator\Desktop\Courses\App\backend>
Далее нам необходимо создать файл sitemaps.py, я его создам в нашем модуле blog.
modules/blog/sitemaps.py
from django.contrib.sitemaps import Sitemap
from modules.blog.models import Article
class ArticleSitemap(Sitemap):
"""
Sitemap for articles
"""
changefreq = 'monthly'
priority = 0.9
protocol = 'https'
def items(self):
return Article.objects.all()
def lastmod(self, obj):
return obj.created_at
Пояснения:
items
- наши статьи.lastmod
- время создания статьи.changefreq
- изменение статьи, я поставил как monthly (раз в месяц)priority
- приоритет индексации, по умолчанию 0.9protocol
- протокол https, если вы подключили для домена ssl сертификат.
А теперь добавим sitemap в urls.py
backend/urls.py
from django.contrib import admin
from django.urls import path, include
from django.contrib.sitemaps.views import sitemap
from django.conf.urls.static import static
from backend import settings
from modules.blog.sitemaps import ArticleSitemap
sitemaps = {
'articles': ArticleSitemap,
}
urlpatterns = [
path('ckeditor5/', include('django_ckeditor_5.urls')),
path('admin/', admin.site.urls),
path('s/', include('modules.system.urls')),
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
path('', include('modules.blog.urls')),
]
if settings.DEBUG:
urlpatterns = [path('__debug__/', include('debug_toolbar.urls'))] + urlpatterns
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Пояснение:
- Добавил
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap')
импортировав from modules.blog.sitemaps import ArticleSitemap и from django.contrib.sitemaps.views import sitemap
Давайте теперь проверим наш sitemap.xml

Отлично. У Вас все получилось!