From 7e7d0a7d4912fb0dcdb6a2ac556240180379e4d6 Mon Sep 17 00:00:00 2001 From: erjemin Date: Thu, 29 Jan 2026 22:33:33 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=B4=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=BE=D0=B5=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20sitemap.xml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etpgrf_site/blog/sitemaps.py | 14 ++++++++++++++ etpgrf_site/etpgrf_site/settings.py | 1 + etpgrf_site/etpgrf_site/urls.py | 23 +++++++++++++++-------- 3 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 etpgrf_site/blog/sitemaps.py diff --git a/etpgrf_site/blog/sitemaps.py b/etpgrf_site/blog/sitemaps.py new file mode 100644 index 0000000..2a1f02b --- /dev/null +++ b/etpgrf_site/blog/sitemaps.py @@ -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 diff --git a/etpgrf_site/etpgrf_site/settings.py b/etpgrf_site/etpgrf_site/settings.py index f66afdb..26a6a7d 100644 --- a/etpgrf_site/etpgrf_site/settings.py +++ b/etpgrf_site/etpgrf_site/settings.py @@ -34,6 +34,7 @@ INSTALLED_APPS = [ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.sitemaps', # Sitemap 'typograph', # Основное приложение типографа 'blog', # Приложение для блога и страниц ] diff --git a/etpgrf_site/etpgrf_site/urls.py b/etpgrf_site/etpgrf_site/urls.py index 4f69687..a2231b9 100644 --- a/etpgrf_site/etpgrf_site/urls.py +++ b/etpgrf_site/etpgrf_site/urls.py @@ -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('/', blog_views.page_detail, name='page_detail'), ]