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'), ]