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.messages',
'django.contrib.staticfiles',
'django.contrib.sitemaps', # Sitemap
'typograph', # Основное приложение типографа
'blog', # Приложение для блога и страниц
]

View File

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