add: динамическое создание sitemap.xml

This commit is contained in:
2026-01-29 22:33:33 +03:00
parent a95d677bb7
commit 7e7d0a7d49
3 changed files with 30 additions and 8 deletions

View File

@@ -0,0 +1,14 @@
from django.contrib.sitemaps import Sitemap
from .models import Post
class PostSitemap(Sitemap):
changefreq = "weekly" # Как часто меняются страницы
priority = 0.9 # Приоритет (от 0.0 до 1.0)
def items(self):
"""Возвращает все опубликованные посты и страницы."""
return Post.objects.filter(is_published=True)
def lastmod(self, obj):
"""Возвращает дату последнего изменения."""
return obj.published_at # Или можно добавить поле updated_at

View File

@@ -34,6 +34,7 @@ INSTALLED_APPS = [
'django.contrib.sessions', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.messages',
'django.contrib.staticfiles', 'django.contrib.staticfiles',
'django.contrib.sitemaps', # Sitemap
'typograph', # Основное приложение типографа 'typograph', # Основное приложение типографа
'blog', # Приложение для блога и страниц 'blog', # Приложение для блога и страниц
] ]

View File

@@ -2,19 +2,26 @@ from django.contrib import admin
from django.urls import path, include from django.urls import path, include
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from blog import views as blog_views # Импортируем views из приложения blog from django.contrib.sitemaps.views import sitemap # Импортируем view для sitemap
from blog.models import PostType # Для использования в корневом urls.py from blog import views as blog_views
from blog.sitemaps import PostSitemap # Импортируем наш класс Sitemap
# Словарь с картами сайта
sitemaps = {
'posts': PostSitemap,
}
urlpatterns = [ urlpatterns = [
path('adm-in/', admin.site.urls), path('adm-in/', admin.site.urls),
path('', include('typograph.urls')), # Основное приложение типографа path('', include('typograph.urls')),
# Блог # Блог
path('blog/', include('blog.urls')), path('blog/', include('blog.urls')),
# Статические страницы (ловушка в самом конце, чтобы не перехватывать другие URL) # Sitemap.xml
# Исключаем слаги, которые могут конфликтовать с другими URL-ами path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
# Например, 'admin', 'blog', 'static', 'media'
# Статические страницы (ловушка в самом конце)
path('<slug:slug>/', blog_views.page_detail, name='page_detail'), path('<slug:slug>/', blog_views.page_detail, name='page_detail'),
] ]